4. 寻找两个有序数组的中位数
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] A = nums1;
int[] B = nums2;
int m = A.length;
int n = B.length;
if(m > n){
int[] temp = A; A = B; B = temp;
int tmp = m; m = n; n = tmp;
}
int iMin = 0, iMax = m, halflen = (m + n + 1) / 2;
while (iMin <= iMax) {
int i = (iMin + iMax) / 2;
int j = halflen - i;
if(i < iMax && A[i] < B[j-1]){
iMin = i + 1;
}else if(i > iMin && B[j] < A[i-1]){
iMax = i - 1;
}
else{
int leftMax = 0;
if(i == 0){leftMax = B[j-1];}
else if(j == 0){leftMax = A[i-1];}
else{leftMax = Math.max(A[i-1], B[j-1]);}
if((m + n) % 2 == 1){return leftMax;}
int rightmin = 0;
if(i == m){rightmin = B[j];}
else if(j == n){rightmin = A[i];}
else{rightmin = Math.min(A[i], B[j]);}
return (leftMax + rightmin) / 2.0;
}
}
return 0.0;
}
}