n u m s 1 [ i − 1 ] ≤ n u m s 2 [ j ] & & n u m s 2 [ j − 1 ] ≤ n u m s 1 [ i ] nums1[i-1] \leq nums2[j] \ \&\& \ nums2[j-1] \leq nums1[i] nums1[i−1]≤nums2[j] && nums2[j−1]≤nums1[i]
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size(), n = nums2.size();
if (m > n) return findMedianSortedArrays(nums2, nums1);
int leftTotal = (m + n + 1) / 2;
int left = 0, right = m;
while (left < right) {
int i = left + (right - left + 1) / 2;
int j = leftTotal - i;
// nums1[i-1] <= nums2[j]
if (nums1[i-1] > nums2[j]) {
right = i -1;
} else {
left = i;
}
}
int i = left;
int j = leftTotal - i;
int nums1LeftMax = (i == 0)? INT_MIN: nums1[i-1];
int nums2LeftMax = (j == 0)? INT_MIN: nums2[j-1];
int nums1RightMin = (i == m)? INT_MAX: nums1[i];
int nums2RightMin = (j == n)? INT_MAX: nums2[j];
if ((m + n ) % 2 == 1) {
return max(nums1LeftMax, nums2LeftMax);
} else{
return (max(nums1LeftMax, nums2LeftMax) + min(nums1RightMin, nums2RightMin)) / 2.0;
}
}
};