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 49
| class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(), n = nums2.size(); if(m > n) { nums1.swap(nums2); swap(m, n); } if(m == 0) return (n & 1) ? (nums2[n / 2]) : (nums2[n / 2] + nums2[n / 2 - 1]) / 2.0; int lo = 0, hi = m; while(lo <= hi) { int i = lo + (hi - lo) / 2, j = (m + n + 1) / 2 - i; if(i > 0 && nums1[i - 1] > nums2[j]) hi = i - 1; else if(i < m && nums2[j - 1] > nums1[i]) lo = i + 1; else { int left, right;
if(i == 0) left = nums2[j - 1]; else if(j == 0) left = nums1[i - 1]; else left = max(nums1[i - 1], nums2[j - 1]);
if((m + n) & 1) return left;
if(i == m) right = nums2[j]; else if(j == n) right = nums1[i]; else right = min(nums1[i], nums2[j]);
return (left + right) / 2.0; } } return 0; } };
|