美文网首页
Leetcode4-求两个有序数组的中位数

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

作者: 西5d | 来源:发表于2019-01-05 21:04 被阅读20次

    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;
    
    

    相关文章

      网友评论

          本文标题:Leetcode4-求两个有序数组的中位数

          本文链接:https://www.haomeiwen.com/subject/asbdrqtx.html