给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size();
int n = nums2.size();
if(m > n)
{
return findMedianSortedArrays(nums2, nums1);
}
int imin = 0;
int imax = m;
while(imin <= imax)
{
int i = (imin + imax) / 2;
int j = (m + n + 1) / 2 - i;
if(j != 0 && i != m && nums2[j - 1] > nums1[i]) imin = i + 1;
else if(i != 0 && j != n && nums1[i - 1] > nums2[j]) imax = i -1;
else
{
int maxleft = 0;
if(i == 0) maxleft = nums2[j-1];
else if(j == 0) maxleft = nums1[i -1];
else
{
maxleft = max(nums1[i -1], nums2[j -1]);
}
if((m + n) % 2 == 1) return maxleft;
int minright = 0;
if(i == m) minright = nums2[j];
else if(j == n) minright = nums1[i];
else
{
minright = min(nums1[i], nums2[j]);
}
return (maxleft + minright) / 2.0;
}
}
return 5;
}
};