12345678910111213141516171819202122232425262728 |
- class Solution {
- public double findMedianSortedArrays(int[] nums1, int[] nums2) {
- if (nums2.length < nums1.length) return findMedianSortedArrays(nums2, nums1);
- int m = nums1.length, n = nums2.length;
- int k = (m + n + 1) / 2;
- int beg1 = 0, end1 = m;
- while (beg1 <= end1) {
- int i = beg1 + (end1 - beg1) / 2;
- int j = k - i;
- if (0 < i && nums2[j] < nums1[i - 1]) {
- end1 = i - 1; // Take too much
- } else if (i < m && nums1[i] < nums2[j - 1]) {
- beg1 = i + 1; // Take too little
- } else {
- int maxOfLeft = 0, minOfRight = 0;
- if (i == 0) maxOfLeft = nums2[j - 1];
- else if (j == 0) maxOfLeft = nums1[i - 1];
- else maxOfLeft = Math.max(nums1[i-1], nums2[j-1]);
- if (((m + n) & 1) == 1) return (double) maxOfLeft;
- if (i == m) minOfRight = nums2[j];
- else if (j == n) minOfRight = nums1[i];
- else minOfRight = Math.min(nums1[i], nums2[j]);
- return (maxOfLeft + minOfRight) / 2.0;
- }
- }
- return -1.0;
- }
- }
|