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
| class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { if (nums1 == null || nums2 == null) { return 0; } int total = nums1.length + nums2.length; if (total % 2 == 0) { return (findKth(nums1, nums2, 0, 0, total / 2) + findKth(nums1, nums2, 0, 0, total / 2 + 1)) / 2.0; } else { return findKth(nums1, nums2, 0, 0, total / 2 + 1); } } private int findKth(int[] nums1, int[] nums2, int start1, int start2, int k) { if (start1 >= nums1.length) { return nums2[start2 + k - 1]; } if (start2 >= nums2.length) { return nums1[start1 + k - 1]; } if (k == 1) { return Math.min(nums1[start1], nums2[start2]); } int val1 = start1 + k / 2 - 1 < nums1.length ? nums1[start1 + k / 2 - 1] : Integer.MAX_VALUE; int val2 = start2 + k / 2 - 1 < nums2.length ? nums2[start2 + k / 2 - 1] : Integer.MAX_VALUE; if (val1 < val2) { return findKth(nums1, nums2, start1 + k / 2, start2, k - k / 2); } else { return findKth(nums1, nums2, start1, start2 + k / 2, k - k / 2); } } }
|