标签:int start boolean array median dia pre find lse solution
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.length;
int len2 = nums2.length;
if (len1 == 0 && len2 == 0) return 0;
if (len2 < len1) {
int[] temp = nums2;
nums2 = nums1;
nums1 = temp;
len1 = nums1.length;
len2 = nums2.length;
}
int half = (len1 + len2 + 1) / 2;
boolean even = ((len1 + len2) % 2) == 0 ? true : false;
int start = 0;
int end = len1;
int apart = 0;
int bpart = 0;
while (start <= end) {
apart = (start + end) / 2;
bpart = half - apart;
if (apart > start && nums1[apart - 1] > nums2[bpart]) end = apart - 1;
else if (apart < end && nums1[apart] < nums2[bpart - 1]) start = apart + 1;
else {
int leftmax = 0;
if (apart == 0) leftmax = nums2[bpart - 1];
else if (bpart == 0) leftmax = nums1[apart - 1];
else {
leftmax = Math.max(nums1[apart - 1], nums2[bpart - 1]);
}
if (!even) return leftmax;
int minRight = 0;
if (apart == len1) minRight = nums2[bpart];
else if (bpart == len2) minRight = nums1[apart];
else {
minRight = Math.min(nums2[bpart], nums1[apart]);
}
return (leftmax + minRight) / 2.0;
}
}
return 0;
}
}
//时间复杂度: O(log(min(m, n)))
//空间复杂度: O(1)
leetcode 4. Median of Two Sorted Arrays (java)
标签:int start boolean array median dia pre find lse solution
原文地址:https://www.cnblogs.com/eniac-inner/p/12468876.html