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)).
Subscribe to see which companies asked this question
Have you met this question in a real interview?
class Solution {
private:
double findKthSortedArrays(int nums1[], int m, int nums2[], int n, int k) {
if (m > n)
return findKthSortedArrays(nums2, n, nums1, m, k);
if (m == 0)
return nums2[k-1];
if (k == 1)
return min(nums1[0], nums2[0]);
int p1 = min(k/2, m);
int p2 = k-p1;
if (nums1[p1-1] == nums2[p2-1])
return nums1[p1-1];
else if(nums1[p1-1] < nums2[p2-1])
return findKthSortedArrays(nums1+p1, m-p1, nums2, n, k-p1);
else
return findKthSortedArrays(nums1, m, nums2+p2, n-p2, k-p2);
}
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int totalLen = nums1.size() + nums2.size();
int median;
if (totalLen % 2)
{
return findKthSortedArrays(&nums1[0], nums1.size(), &nums2[0], nums2.size(), totalLen/2+1);
}
else
{
return (findKthSortedArrays(&nums1[0], nums1.size(), &nums2[0], nums2.size(), totalLen/2) + findKthSortedArrays(&nums1[0], nums1.size(), &nums2[0], nums2.size(), totalLen/2+1)) / 2;
}
}
};