Leetcode4-求两个有序数组的中位数

2019-01-05  本文已影响20人  西5d

LeetCode题目编号和以前不一致了,编号可能会不对应。回到问题,描述有两个有序的数组,找数组的中位数如2,3,4,5,6 ,中位数为4;考虑的情况有,数组元素总数为奇数,则相当于排序后的中间位置数,如有(m+n)%2==1,有mid=(m+n)/2;如果数组元素总数为偶数,则相当于中间两个数的平均值,如有(m+n)%2==0,即是(m+n)/2(m+n)/2-1两数字的平均值,用double表示,java默认为double,不用强转。
以下代码题目思路如下:因为是有序的,合并为一个数组,长度m+n,在按照长度的奇偶判断中位数,算法时间复杂度O(m+n),申请3个标记,分别给两个原始数组,以及新数组,比较原始数组大小放入新数组,对应的标记累加,重点注意各个数组长度的边界条件。

 int[] arr = new int[nums1.length + nums2.length];
        int i = 0, j = 0, k = 0;
        while (j < nums1.length && k < nums2.length) {
            if (nums1[j] < nums2[k]) {
                arr[i] = nums1[j];
                i++;
                j++;
            } else {
                arr[i] = nums2[k];
                i++;
                k++;
            }
        }

        while (j < nums1.length) {
            arr[i] = nums1[j];
            i++;
            j++;
        }

        while (k < nums2.length) {
            arr[i] = nums2[k];
            i++;
            k++;
        }

        double mid;
        if (arr.length % 2 == 0) {
            mid = (arr[arr.length / 2 - 1] + arr[arr.length / 2]) / 2.0;
        } else {
            mid = arr[arr.length / 2];
        }

        return mid;

上一篇 下一篇

猜你喜欢

热点阅读