
image.png
参考:https://hk029.gitbooks.io/leetbook/content/%E5%88%86%E6%B2%BB/004.%20Median%20of%20Two%20Sorted%20Arrays[H]/004.%20Median%20of%20Two%20Sorted%20Arrays[H].html
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n1 = nums1.size();
int n2 = nums2.size();
if(n1 == 0) return helper(nums2);
if(n2 == 0) return helper(nums1);
if(n1 > n2) return findMedianSortedArrays(nums2, nums1);
int L1, L2, R1, R2, C1, C2, low = 0, high = 2 * n1;
while(low <= high){
C1 = (low + high) / 2;
C2 = n1 + n2 - C1;
L1 = C1 == 0 ? INT_MIN : nums1[(C1 - 1) / 2];
R1 = C1 == n1 * 2 ? INT_MAX : nums1[C1 / 2];
L2 = C2 == 0 ? INT_MIN : nums2[(C2 - 1) / 2];
R2 = C2 == n2 * 2 ? INT_MAX : nums2[C2 / 2];
if(L1 > R2) high = C1 - 1;
else if(L2 > R1) low = C1 + 1;
else break;
}
return (max(L1, L2) + min(R1, R2)) / 2.0;
}
private:
double helper(vector<int> nums){
if(nums.size() == 0) return -1;
return (nums[(nums.size())/2] + nums[(nums.size() - 1)/2]) / 2.0;
}
};
网友评论