#include #include using namespace std; double findMedianSortedArrays(vector& nums1, vector& nums2) { int m = nums1.size(); int n = nums2.size(); // ensure that nums1 is the smaller array if (m > n) { return findMedianSortedArrays(nums2, nums1); } int left = 0; int right = m; int half_len = (m + n + 1) / 2; while (left <= right) { int i = left + (right - left) / 2; int j = half_len - i; if (i < right && nums2[j-1] > nums1[i]) { // i is too small, increase it left = i + 1; } else if (i > left && nums1[i-1] > nums2[j]) { // i is too big, decrease it right = i - 1; } else { // i is perfect, calculate the median int max_left = 0; if (i == 0) { max_left = nums2[j-1]; } else if (j == 0) { max_left = nums1[i-1]; } else { max_left = max(nums1[i-1], nums2[j-1]); } if ((m + n) % 2 == 1) { return max_left; } int min_right = 0; if (i == m) { min_right = nums2[j]; } else if (j == n) { min_right = nums1[i]; } else { min_right = min(nums1[i], nums2[j]); } return (max_left + min_right) / 2.0; } } return 0.0; } int main() { vector nums1 = {1, 3}; vector nums2 = {2}; cout << findMedianSortedArrays(nums1, nums2) << endl; // Output: 2.00000 nums1 = {1, 2}; nums2 = {3, 4}; cout << findMedianSortedArrays(nums1, nums2) << endl; // Output: 2.50000 return 0; }