1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { if(nums1.size() > nums2.size()) { return findMedianSortedArrays(nums2, nums1); }
int m = nums1.size(); int n = nums2.size(); int left_size = (m + n + 1) / 2;
int left = 0; int right = m; while (left < right) { int i = left + (right - left) / 2; int j = left_size - i;
if (i < m && nums1[i] < nums2[j - 1]) { left = i + 1; } else { right = i; } }
int i = left; int j = left_size - i;
int nums1_left_max = (i == 0) ? INT_MIN : nums1[i - 1]; int nums1_right_min = (i == m) ? INT_MAX : nums1[i]; int nums2_left_max = (j == 0) ? INT_MIN : nums2[j - 1]; int nums2_right_min = (j == n) ? INT_MAX : nums2[j]; if ((m + n) % 2 == 1) { return max(nums1_left_max, nums2_left_max); } else { return (double)(max(nums1_left_max, nums2_left_max) + min(nums1_right_min, nums2_right_min)) / 2; } } };
|