题目描述:找出两个有序数组的中位数,两个有序数组不同时为空。

题目链接:Leetcode 4. Median of Two Sorted Arrays

这个是就是归并排序归并的部分,很经典。利用外部排序先得出结果,然后再求中位数,当然下面开一个新的那么大的数组是没有必要的。

代码如下



class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int l1 = nums1.length;
        int l2 = nums2.length;
        int[] ans = new int[l1 + l2];
        boolean flag = true;// 默认加一位
        if (((l1 + l2) & 1) != 0) {//奇数
            flag = false; //是否加一
        }
        int idx1 = 0, idx2 = 0, index = 0;
        while (idx1 < l1 && idx2 < l2) {
            if (nums1[idx1] < nums2[idx2]) {
                ans[index++] = nums1[idx1++]; // 添加后右移
            } else {
                ans[index++] = nums2[idx2++];
            }
        }
        while (idx1 < l1) {
            ans[index++] = nums1[idx1++]; //处理结尾
        }
        while (idx2 < l2) {
            ans[index++] = nums2[idx2++];
        }
        int median = (l1 + l2 - 1) / 2;
        if (flag == true) {
            double result = (ans[median] + ans[median + 1]) / 2.0;
            return result;
        } else {
            return  ans[median];
        }
    }
}

参考链接

Leetcode 4. Median of Two Sorted Arrays

相关文章: