寻找两个正序数组的中位数

    科技2024-06-04  76

    class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int MIN_VALUE = 0x80000000; int MAX_VALUE = 0x7fffffff; int N1 = nums1.length; int N2 = nums2.length; if (N1 > N2) {// 确保N1是短的部分。 return findMedianSortedArrays(nums2, nums1); } if (N1 == 0) return N2%2==0?(double)(nums2[N2/2]+nums2[N2/2-1])/2:(double)nums2[N2/2]; int size = N1 + N2; int cutL = 0, cutR = N1; int cut1 = N1 / 2; int cut2 = size / 2 - cut1; while (cut1 <= N1) { cut1 = (cutR - cutL) / 2 + cutL; cut2 = size / 2 - cut1; double L1 = (cut1 == 0) ? MIN_VALUE : nums1[cut1 - 1]; double L2 = (cut2 == 0) ? MIN_VALUE : nums2[cut2 - 1]; double R1 = (cut1 == N1) ? MAX_VALUE : nums1[cut1]; double R2 = (cut2 == N2) ? MAX_VALUE : nums2[cut2]; if (L1 > R2) cutR = cut1 - 1; else if (L2 > R1) cutL = cut1 + 1; else {// Otherwise, that's the right cut. if (size % 2 == 0) {// 偶数个数的时候 L1 = (L1 > L2 ? L1 : L2); R1 = (R1 < R2 ? R1 : R2); return (L1 + R1) / 2; } else { R1 = (R1 < R2 ? R1 : R2); return R1; } } } return -1; } }
    Processed: 0.011, SQL: 8