4.Median of Two Sorted Arrays

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m = nums1.length, n = nums2.length;
        //l 和 r 解决(m + n)奇偶性问题
        int l = (m + n + 1) / 2;
        int r = (m + n + 2) / 2;
        return (getK(nums1, 0, nums2, 0, l) + getK(nums1, 0, nums2, 0, r)) / 2;
    }
    private double getK(int[] A, int aStart, int[] B, int bStart, int k) {
        if(aStart > A.length - 1)
            return B[bStart + k - 1];
        if(bStart > B.length - 1)
            return A[aStart + k - 1];
        if(k == 1)
            return Math.min(A[aStart], B[bStart]);
        
        int aMin = (aStart + k / 2 - 1 < A.length)?A[aStart + k / 2 - 1] : Integer.MAX_VALUE;
        int bMin = (bStart + k / 2 - 1 < B.length)?B[bStart + k / 2 - 1] :Integer.MAX_VALUE;
        if(aMin < bMin) {
            return getK(A, aStart + k / 2, B, bStart, k - k / 2); //ALeft + BRight  多长多短通过k - k / 2判断
        }else {
            return getK(A, aStart, B, bStart + k / 2, k - k / 2);//ARight + BLeft   多长多短通过k - k / 2判断
        }
    }

猜你喜欢

转载自blog.csdn.net/STU756/article/details/81677179