寻找两个正序数组的中位数
题目链接:寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
方法一:二分
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
if (nums1.size() > nums2.size()) return findMedianSortedArrays(nums2,nums1);
int m = nums1.size();
int n = nums2.size();
int half = (m+n+1)/2;
int l = -1,r = m+1;
while (l + 1 < r) {
int mid1 = (l+r) / 2;
int mid2 = half - mid1;
int A_left = (mid1 == 0) ? INT_MIN : nums1[mid1-1];
int A_right = (mid1 == m) ? INT_MAX : nums1[mid1];
int B_left = (mid2 == 0) ? INT_MIN : nums2[mid2-1];
int B_right = (mid2 == n) ? INT_MAX : nums2[mid2];
if (A_left <= B_right && B_left <= A_right) {
int leftMax = max(A_left,B_left);
if ((m+n) % 2 == 1) {
return (double)leftMax;
}
int rightMin = min(A_right, B_right);
return (leftMax + rightMin) / 2.0;
}else if(A_left > B_right) {
r = mid1;
}else {
l = mid1;
}
}
return 0.0;
}
};