题目描述:找出两个有序数组合并之后的中位数。复杂度控制在log(N)
如:
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
思路:
先转成logN内求两个数组第K大,二分即可实现。
在求 第(N+2)/2 是多少,以及 (N+1)/2是多少,即可。
AC代码:
int min(int a,int b){
if(a<b)return a;
return b;
}
int fk(int* n1,int n,int* m1 ,int m,int k){
if (n < m){
return fk(m1,m,n1,n,k);
}
if(m==0){
return n1[k-1];
}
if(k==1){
return min(n1[0],m1[0]);
}
int l = min(k/2,n);
int r = min(k/2,m);
if(n1[l-1] < m1[r-1]){
return fk(n1+l,n-l,m1,m,k-l);
}else{
return fk(n1,n,m1+r,m-r,k-r);
}
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int l = (nums1Size + nums2Size+2)/2;
int r = (nums1Size + nums2Size+1)/2;
return (fk(nums1,nums1Size,nums2,nums2Size,l)+fk(nums1,nums1Size,nums2,nums2Size,r))/2.0;
}