题目
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
解析
把两个数组分成两个部分,左边的小于右边的。中位数在中间取。
class Solution {
public double findMedianSortedArrays(int[] A, int[] B) {
int m = A.length, n = B.length;
if (m > n) {
int[] tmp = A;
A = B;
B = tmp;
int tt = m;
m = n;
n = tt;
}
int left = 0, right = m;
int maxOfLeft = 0, minOfRight = 0;
while (left <= right) {
int i = (left + right) / 2;
int j = (m + n + 1) / 2 - i;
if (i < m && B[j - 1] > A[i])
left = i + 1;
else if (i > 0 && A[i - 1] > B[j])
right = i - 1;
else {
if (i == 0) maxOfLeft = B[j - 1];
else if (j == 0) maxOfLeft = A[i - 1];
else maxOfLeft = Math.max(A[i - 1], B[j - 1]);
if ((m + n) % 2 == 1)
return maxOfLeft;
if (i == m) minOfRight = B[j];
else if (j == n) minOfRight = A[i];
else minOfRight = Math.min(A[i], B[j]);
return (minOfRight + maxOfLeft) / 2.0;
}
}
return 0;
}
}