double findKth(int* nums1, int nums1Size, int* nums2, int nums2Size,int k)
{
if(nums1Size == 0)
return nums2[k-1];
if(nums1Size > nums2Size)
return findKth(nums2,nums2Size,nums1,nums1Size,k);
if(k==1)
return nums1[0]<nums2[0]? nums1[0]:nums2[0];
int i = nums1Size>k/2? k/2:nums1Size;
int j = k - i ;
if(nums1[i-1] < nums2[j-1])
return findKth(nums1+i,nums1Size-i,nums2,nums2Size,k-i);
else if(nums1[i-1] > nums2[j-1])
return findKth(nums1,nums1Size,nums2+j,nums2Size-j,k-j);
else
return nums1[i-1];
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int sum = nums1Size+nums2Size;
if(sum % 2 !=0)
return findKth(nums1,nums1Size,nums2,nums2Size,sum/2+1);
else
return (findKth(nums1,nums1Size,nums2,nums2Size,sum/2)+
findKth(nums1,nums1Size,nums2,nums2Size,sum/2+1))/2;
}
思路:二分法
leetcode4
最新推荐文章于 2021-08-31 15:21:29 发布