题目描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数
示例:nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5
在统计中,中位数被用来:将一个集合划分为两个长度相等的子集,其中一个子集中的元素总是大于另一个子集中的元素。
Java代码:
class Solution {
public double findMedianSortedArrays(int[] A, int[] B) {
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&&B[j-1]>A[i]) {
iMin=i+1;
}else if(i>iMin&&A[i-1]>B[j]) {
iMax=i-1;
}else{
int maxLeft = 0;
if(i==0) {maxLeft = B[j-1];}
else if(j==0) {maxLeft=A[i-1];}
else {maxLeft = Math.max(A[i-1],B[j-1]);}
if((m+n)%2==1) {return maxLeft;}
int minRight = 0;
if(i==m){minRight=B[j];}
else if(j==n) {minRight=A[i];}
else{minRight=Math.min(B[j],A[i]);}
return (maxLeft+minRight)/2.0;
}
}
return 0.0;
}
}