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 33 34 35 36 37 38 39 40 41 42 43 44
| package com.demo.s4;
public class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { if(nums1.length > nums2.length) { return findMedianSortedArrays(nums2, nums1); } int m = nums1.length; int n = nums2.length; int left = 0; int right = m; int median1 = 0; int median2 = 0; while(left <= right) { int i = (left + right) / 2; int j = (m + n + 1) / 2 - i; int mediana1 = (i == 0 ? Integer.MIN_VALUE : nums1[i-1]); int mediana2 = (i == m ? Integer.MAX_VALUE : nums1[i]); int medianb1 = (j == 0 ? Integer.MIN_VALUE : nums2[j-1]); int medianb2 = (j == n ? Integer.MAX_VALUE : nums2[j]); if(mediana1 <= medianb2) { median1 = Math.max(mediana1, medianb1); median2 = Math.min(mediana2, medianb2); left = i + 1; } else { right = i - 1; } } return ( m + n) %2==0? (median1 + median2) / 2.0 : median1; }
}
|