题目
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)).
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) {
int m = nums1.size(), n = nums2.size();
if (m > n) return findMedianSortedArrays(nums2, nums1);
int imin = 0, imax = m, half_len = (m + n + 1) / 2, i, j;
while (imin <= imax) {
i = (imin + imax) / 2;
j = half_len - i;
if (i < m && nums2[j-1] > nums1[i])
imin = i + 1;
else if (i > 0 && nums1[i-1] > nums2[j])
imax = i - 1;
else // find the correct pos
break;
}
int maxleft = 0, minright = 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;
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;
}
};