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)).
You may assume nums1 and nums2 cannot be both empty.
Example 1:
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2);
};
double
Solution::findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
const int szpart1 = nums1.size();
const int szpart2 = nums2.size();
if (szpart1 > szpart2) return findMedianSortedArrays(nums2, nums1);
const int tmid = (szpart1 + szpart2 + 1) / 2;
int l = 0;
int r = szpart1;
while (l < r) {
int mid1 = l + (r - l) / 2;
int mid2 = tmid - mid1;
if (nums1[mid1] < nums2[mid2 - 1])
l = mid1 + 1;
else
r = mid1;
}
int mid1 = l;
int mid2 = tmid - l;
double s1 = (double)max(mid1 <= 0 ? INT_MIN : nums1[mid1 - 1],
mid2 <= 0 ? INT_MIN : nums2[mid2 - 1]);
if ((szpart1 + szpart2) % 2 == 1) return s1;
double s2 = (double)min(mid1 >= szpart1 ? INT_MAX : nums1[mid1],
mid2 >= szpart2 ? INT_MAX : nums2[mid2]);
return (double)((s1 + s2) / 2.0);
}