#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;
class Solution {
public:
static double findMedianSortedArrays(vector<int> &nums1, vector<int> &nums2) {
if (nums1.size() > nums2.size()) swap(nums1, nums2);
int m = static_cast<int>(nums1.size());
int n = static_cast<int>(nums2.size());
int left = 0, right = m;
while (left <= right) {
int i = (left + right) / 2;
int j = (m + n + 1) / 2 - i; // 左半总数 = ceil((m+n)/2) = 5
int l1 = (i == 0) ? INT_MIN : nums1[i - 1];
int r1 = (i == m) ? INT_MAX : nums1[i];
int l2 = (j == 0) ? INT_MIN : nums2[j - 1];
int r2 = (j == n) ? INT_MAX : nums2[j];
if (l1 <= r2 && l2 <= r1) {
if ((m + n) % 2 == 1) {
return max(l1, l2); // 第5小 = 左半最大值
} else {
return (max(l1, l2) + min(r1, r2)) / 2.0;
}
} else if (l1 > r2) {
right = i - 1;
} else {
left = i + 1;
}
}
return 0.0;
}
};
int main() {
vector<int> nums1 = {1, 2, 5, 6};
vector<int> nums2 = {3, 4, 7, 8, 9};
const double median = Solution::findMedianSortedArrays(nums1, nums2);
// 手动验证:合并后为 [1,2,3,4,5,6,7,8,9] → 中位数是 5
cout << "nums1: [1, 2, 5, 6]" << endl;
cout << "nums2: [3, 4, 7, 8, 9]" << endl;
cout << "合并后: [1, 2, 3, 4, 5, 6, 7, 8, 9]" << endl;
cout << "中位数是: " << median << endl;
return 0;
}