1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size() + nums2.size(); if (n % 2 == 1) return kth(nums1, 0, nums2, 0, n / 2 + 1); else return (kth(nums1, 0, nums2, 0, n / 2) + kth(nums1, 0, nums2, 0, n / 2 + 1)) / 2.0; } int kth(vector<int> &nums1, int n1, vector<int> &nums2, int n2, int k) { if (nums1.size() - n1 > nums2.size() - n2) return kth(nums2, n2, nums1, n1, k); if (nums1.size() - n1 == 0) return nums2[n2 + k - 1]; if (k == 1) return min(nums1[n1], nums2[n2]); int p = min(k / 2, int(nums1.size() - n1)); if (nums1[n1 + p - 1] < nums2[n2 + p - 1]) return kth(nums1, n1 + p, nums2, n2, k - p); else return kth(nums1, n1, nums2, n2 + p, k - p); } };
|