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
|
class { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int total = nums1.size() + nums2.size(); if(total & 1) { return findKth(nums1, nums2, 0, 0, total / 2 + 1); }else { return (findKth(nums1, nums2, 0, 0, total / 2) + findKth(nums1, nums2, 0, 0, total / 2 + 1)) / 2.0; } } double findKth(vector<int>& nums1, vector<int>& nums2, int nums1_start, int nums2_start, int k) { if(nums1_start >= nums1.size()) { return nums2[nums2_start + k - 1]; } if(nums2_start >= nums2.size()) { return nums1[nums1_start + k - 1]; } if(k == 1) return min(nums1[nums1_start], nums2[nums2_start]);
int nums1_key = nums1_start + k / 2 - 1>= nums1.size() ? INT_MAX : nums1[nums1_start + k / 2 - 1]; int nums2_key = nums2_start + k / 2 - 1>= nums2.size() ? INT_MAX : nums2[nums2_start + k / 2 - 1]; if(nums1_key < nums2_key) { return findKth(nums1, nums2, nums1_start + k / 2, nums2_start, k - k / 2); }else { return findKth(nums1, nums2, nums1_start, nums2_start + k / 2, k - k / 2); } } };
|
近期评论