Skip to content

需要重温

java
class Solution {
    /**
     * 需要重温
     */
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        if (nums1.length > nums2.length) {
            int[] tmp = nums1;
            nums1 = nums2;
            nums2 = tmp;
        }

        int m = nums1.length;
        int n = nums2.length;
        int median = (m + n + 1) / 2;
        int l = -1, r = m + 1;
        while (l < r - 1) {
            int i1 = l + (r - l) / 2; // 有i1个元素在第一个数组
            int i2 = median - i1;
            int ai = (i1 - 1 < 0) ? Integer.MIN_VALUE : nums1[i1 - 1]; // 数组1左侧最大值
            int bi1 = (i2 >= n) ? Integer.MAX_VALUE : nums2[i2];       // 数组2右侧最小值
            if (ai <= bi1) {
                l = i1;
            } else {
                r = i1;
            }
        }

        int i1 = l;
        int i2 = median - i1;
        int ai = (i1 - 1 < 0) ? Integer.MIN_VALUE : nums1[i1 - 1];
        int ai1 = (i1 >= m) ? Integer.MAX_VALUE : nums1[i1];
        int bi = (i2 - 1 < 0) ? Integer.MIN_VALUE : nums2[i2 - 1];
        int bi1 = (i2 >= n) ? Integer.MAX_VALUE : nums2[i2];
        if ((m + n) % 2 == 1) {
            return Math.max(ai, bi);
        } else {
            return (Math.max(ai, bi) + Math.min(ai1, bi1)) / 2.0;
        }

    }
}

Personal Knowledge Base