您的位置:首页 > 其它

Median of Two Sorted Arrays

2015-07-05 00:09 375 查看
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)).

class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size();
int n = nums2.size();
int value1 = KthValue(nums1, m, nums1.begin(), nums2, n, nums2.begin(), (m+n+1)/2);
double result = value1;
if (((m+n) & 1) == 0)
{
int value2 = KthValue(nums1, m, nums1.begin(), nums2, n, nums2.begin(), (m+n)/2+1);
result = ((double)value1 + (double)value2)/2;
}

return result;
}

private:
int KthValue(vector<int> &nums1, int size1, vector<int>::iterator it1, vector<int> &nums2,
int size2, vector<int>::iterator it2, int k)
{
if (size1 > size2)
{
return KthValue(nums2, size2, it2, nums1, size1, it1, k);
}

if (size1 == 0)
{
return *(it2+k-1);
}

if (k == 1)
{
return min(*it1, *it2);
}

int offset1 = min(k/2, size1);
int offset2 = k - offset1;
if (*(it1+offset1-1) <= *(it2+offset2-1))
{
return KthValue(nums1, size1-offset1, it1+offset1, nums2, offset2, it2, k-offset1);
}
else
{
return KthValue(nums1, offset1, it1, nums2, size2-offset2, it2+offset2, k-offset2);
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: