There are two sorted arrays nums1 and nums2 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)).
借鉴了别人的经验,将问题转化为寻找第k小元素的问题。
int findkth(int a[],int m,int b[],int n,int k)
{
if(m>n)
return findkth(b,n,a,m,k);
if(m == 0)
return b[k-1];
if(k==1)
return a[0]<b[0]?a[0]:b[0];
int pa = m<k/2?m:k/2;
int pb = k - pa;
if(a[pa-1] > b[pb-1])
return findkth(a,m,b+pb,n-pb,k-pb);
else if(a[pa-1] < b[pb-1])
return findkth(a+pa,m-pa,b,n,k-pa);
else return a[pa-1];
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int total = nums1Size + nums2Size;
if(total%2 == 1)
return findkth(nums1,nums1Size,nums2,nums2Size,total/2+1);
else
return (findkth(nums1,nums1Size,nums2,nums2Size,total/2) + findkth(nums1,nums1Size,nums2,nums2Size,total/2+1))*1.0/2;
}