题目原网址为https://leetcode.com/problems/median-of-two-sorted-arrays/description/
一、题目
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();
int n = nums2.size();
if (m > n) {
vector<int> tmp = nums1;
nums1 = nums2;
nums2 = tmp;
int tmp2 = m;
m = n;
n = tmp2;
}
int imin = 0;
int imax = m;
while (imin <= imax) {
int i = (imin + imax) / 2;
int j = (m + n + 1) / 2 - i;
if (i > 0 && nums1[i - 1] > nums2[j]) {
imax = i - 1;
} else if (i < m && nums2[j - 1] > nums1[i]) {
imin = i + 1;
} else {
int left_max;
if (i == 0) {
left_max = nums2[j - 1];
} else if (j == 0) {
left_max = nums1[i - 1];
} else {
left_max = nums1[i - 1] > nums2[j - 1] ? nums1[i - 1] : nums2[j - 1];
}
if ((m + n) % 2 == 1) return left_max;
int right_min;
if (i == m) {
right_min = nums2[j];
} else if (j == n) {
right_min = nums1[i];
} else {
right_min = nums1[i] < nums2[j] ? nums1[i] : nums2[j];
}
return (left_max + right_min) / 2.0;
}
}
return 0.0;
}
};