标签:median of two sorted leetcode
描述:
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)).
思路:
1.题意大概为查找两个数组 的中位数,这个不难,O(N)的时间复杂度就可以解决,但题目的要求是用 O(log (m+n))的时间复杂度来解决该问题!
2.由于时间复杂度为 O(log (m+n)),一般会用到二分法,每次取数组nums1和nums2所剩下的部分的中间值mid1和mid2,然后比较两个数组的中间值大小,较大的一个取数组较小的一部分,较小的mid数组取较大的一部分。由于每次都要多虑到一部分不符合条件的,所以刚开始要求第k=(len1+len2)/2个数的k每次都要更新。
3.重负步骤2,直至每个数组剩下的有效部分为0,则另一个数组的nums[start+k]即为中位数;另外一种可能是最后当k==0时,两个数组有效部分的开始的那个数肯定为要求的数。
哎,表述能力不行啊,自己都快被绕晕了(^-^)!
代码:
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
if((nums1==null||nums1.length==0)&&(nums2==null||nums2.length==0))
return 0;
if(nums1==null||nums1.length==0)
return getMidOfOneArray(nums2);
if(nums2==null||nums2.length==0)
return getMidOfOneArray(nums1);
int totalLen = nums1.length + nums2.length;
if ((totalLen & 0x1) == 1)
return findMid(nums1, 0, nums1.length - 1, nums2, 0,
nums2.length - 1, totalLen / 2);
else
return (findMid(nums1, 0, nums1.length - 1, nums2, 0,
nums2.length - 1, totalLen / 2) + findMid(nums1, 0,
nums1.length - 1, nums2, 0, nums2.length - 1,
totalLen / 2 - 1)) * 0.5;
}
public double findMid(int nums1[], int start1, int end1, int nums2[],
int start2, int end2, int k) {
int aLen = end1 - start1 + 1;
int bLen = end2 - start2 + 1;
if (aLen == 0)
return nums2[start2 + k];
if (bLen == 0)
return nums1[start1 + k];
if (k == 0)
return nums1[start1] < nums2[start2] ? nums1[start1]
: nums2[start2];
int aMid = aLen * k / (aLen + bLen);
int bMid = k - aMid - 1;
aMid = aMid + start1;
bMid = bMid + start2;
if (nums1[aMid] > nums2[bMid]) {
k = k - (bMid - start2 + 1);
end1 = aMid;
start2 = bMid + 1;
} else {
k = k - (aMid - start1 + 1);
end2 = bMid;
start1 = aMid + 1;
}
return findMid(nums1, start1, end1, nums2, start2, end2, k);
}
public double getMidOfOneArray(int arr[])
{
if((arr.length&0x1)==0)
return (arr[arr.length/2]+arr[arr.length/2-1])*0.5;
return arr[arr.length/2];
}版权声明:本文为博主原创文章,未经博主允许不得转载。
leetcode_Median of Two Sorted Arrays
标签:median of two sorted leetcode
原文地址:http://blog.csdn.net/mnmlist/article/details/47323437