Guest User

Untitled

a guest
Oct 23rd, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. class Solution {
  2. public:
  3. double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
  4. int len1 = nums1.size(), len2 = nums2.size(), k = (len1 + len2 + 1) / 2;
  5. if((len1 + len2) % 2)
  6. return findKth(nums1, nums2, 0, 0, k);
  7. else
  8. return (findKth(nums1, nums2, 0, 0, k) + findKth(nums1, nums2, 0, 0, k + 1)) / 2.0;
  9. }
  10.  
  11. private:
  12. int findKth(vector<int>& nums1, vector<int>& nums2, int lo1, int lo2, int k)
  13. {
  14. int len1 = static_cast<int>(nums1.size()) - lo1, len2 = static_cast<int>(nums2.size()) - lo2;
  15. if(len1 > len2)
  16. return findKth(nums2, nums1, lo2, lo1, k);
  17.  
  18. if(!len1)return nums2[lo2 + k - 1];
  19. if(k == 1)return min(nums1[lo1], nums2[lo2]);
  20.  
  21. int i = min(k / 2, len1), j = k - i;
  22. if(nums1[lo1 + i - 1] >= nums2[lo2 + j - 1])
  23. return findKth(nums1, nums2, lo1, lo2 + j, k - j);
  24. else
  25. return findKth(nums1, nums2, lo1 + i, lo2, k - i);
  26.  
  27. }
  28. };
Add Comment
Please, Sign In to add comment