给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
code
class Solution {
public:
double findMedianSortedArrays(vector<int>& a, vector<int>& b) {
int m = a.size();int n = b.size();
if(m>n){ //m一定是短的数组的长度
vector<int>temp = a; a=b; b=temp;
int temp1 = m ;m = n; n =temp1;
}
int imin=0,imax=m;
int half = (n+m+1)/2; //注意不要写成(imin+imax+1)/2
while(imin<=imax){
int i = (imin+imax)/2;
int j = half-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 = a[i-1]>b[j-1]?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 = a[i]>b[j]?b[j]:a[i];
return (maxleft+minright)/2.0;
}
}
}
};