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
class Solution{
public:
double findKth(vector<int>& nums1, int m, vector<int>::iterator iter1, vector<int>& nums2, int n, vector<int>::iterator iter2, int k) {
if(m > n) {
return findKth(nums2, n, iter2, nums1, m, iter1,k);
}
if(m == 0) {
return *(iter2+k-1);
}
if(k==1) {
return min(*iter1, *iter2);
}
int pa = min(k/2, m), pb = k-pa;
if(*(iter1+pa-1) < *(iter2+pb-1)) {
return findKth(nums1, m-pa, iter1+pa, nums2, n, iter2, k-pa);
} else if(*(iter1+pa-1) > *(iter2+pb-1)) {
return findKth(nums1, m, iter1, nums2, n-pb, iter2+pb, k-pb);
} else {
return *(iter1+pa-1);
}
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size(), n = nums2.size();
int total = m+n;
if(total & 0x1) {
return findKth(nums1, m, nums1.begin(), nums2, n, nums2.begin(), total/2+1);
} else {
return findKth(nums1, m, nums1.begin(), nums2, n, nums2.begin(), total/2)/2+findKth(nums1, m, nums1.begin(), nums2, n, nums2.begin(), total/2+1)/2;
}
}
};