LeetCode 4. 寻找两个有序数组的中位数

602 阅读1分钟

leetcode-cn.com/problems/me…

理解中位数:

baike.baidu.com/item/中位数/30…

思路:

public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    int i1 = 0, i2 = 0, i = 0, len = nums1.length + nums2.length;
    int[] arr = new int[len];
    while (true) {
        // 每队选出一个代表
        Integer num1Val = i1 < nums1.length ? nums1[i1] : null;
        Integer num2Val = i2 < nums2.length ? nums2[i2] : null;
        // 开始比赛
        if (num1Val != null) {
            if (num2Val != null) {
                arr[i++] = num1Val < num2Val ? nums1[i1++] : nums2[i2++];
            } else {
                arr[i++] = nums1[i1++];
            }
        } else {
            if (num2Val != null) {
                arr[i++] = nums2[i2++];
            } else {
                break;
            }
        }
        if (i > len/2) {
            return len % 2 == 0 ? (arr[len / 2 - 1] + arr[len / 2]) / 2d : arr[(len + 1) / 2 - 1] * 1d;
        }
    }
    return 0d;
}