【数组】Median of Two Sorted Arrays
Median of Two Sorted Arrays
There are two sorted arrays A and B 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)).
double findMedianSortedArrays(int A[], int m, int B[], int n) {
if(m<3 || n<3)
return TrivialMedian(A,m,B,n);
int i = m/2;
int j = (m % 2 == 0 && n % 2 == 0) ? n/2-1 : n/2;
if(A[i] >= B[j]){
if(j >= m-i-1)
return findMedianSortedArrays(A,i+1,B+m-i-1,n-m+i+1);
else
return findMedianSortedArrays(A,m-j,B+j,n-j);
}else{
if(i <= n-j-1)
return findMedianSortedArrays(A+i,m-i,B,n-i);
else
return findMedianSortedArrays(A+n-j-1,m-n+j+1,B,j+1);
}
}
double TrivialMedian(int A[], int m, int B[], int n){
vector<int> nums ;
for(int i = 0; i < m; i++)
nums.push_back(A[i]);
for(int i = 0; i < n; i++)
nums.push_back(B[i]);
sort(nums.begin(),nums.end());
int k = m+n;
if(k % 2 == 0)
return 0.5*(nums[k/2]+nums[k/2 - 1]);
else
return nums[k/2];
}
浙公网安备 33010602011771号