4.median-of-two-sorted-arrays.java 1.2 KB

12345678910111213141516171819202122232425262728
  1. class Solution {
  2. public double findMedianSortedArrays(int[] nums1, int[] nums2) {
  3. if (nums2.length < nums1.length) return findMedianSortedArrays(nums2, nums1);
  4. int m = nums1.length, n = nums2.length;
  5. int k = (m + n + 1) / 2;
  6. int beg1 = 0, end1 = m;
  7. while (beg1 <= end1) {
  8. int i = beg1 + (end1 - beg1) / 2;
  9. int j = k - i;
  10. if (0 < i && nums2[j] < nums1[i - 1]) {
  11. end1 = i - 1; // Take too much
  12. } else if (i < m && nums1[i] < nums2[j - 1]) {
  13. beg1 = i + 1; // Take too little
  14. } else {
  15. int maxOfLeft = 0, minOfRight = 0;
  16. if (i == 0) maxOfLeft = nums2[j - 1];
  17. else if (j == 0) maxOfLeft = nums1[i - 1];
  18. else maxOfLeft = Math.max(nums1[i-1], nums2[j-1]);
  19. if (((m + n) & 1) == 1) return (double) maxOfLeft;
  20. if (i == m) minOfRight = nums2[j];
  21. else if (j == n) minOfRight = nums1[i];
  22. else minOfRight = Math.min(nums1[i], nums2[j]);
  23. return (maxOfLeft + minOfRight) / 2.0;
  24. }
  25. }
  26. return -1.0;
  27. }
  28. }