ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-5-4 第四天第四题

2021-05-04 20:31:17  阅读:166  来源: 互联网

标签:arr int start1 第四 2021 数组 第四天 nums1 nums2


寻找两个正序数组的中位数

给定两个大小分别为 mn 的正序(从小到大)数组 nums1nums2。请你找出并返回这两个正序数组的 中位数

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000

输入:nums1 = [], nums2 = [1]
输出:1.00000

输入:nums1 = [2], nums2 = []
输出:2.00000

Version1:这是自己第一次顺畅的,没有修改的,一次性写对的算法题,骄傲

public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
    //整体思路:将nums1和nums2中的值赋值到一个新的数组,新数组的大小为原来两数组长度的和。从新得到的数组中就很容易得到中位数了。
    int len1=nums1.length;
    int len2=nums2.length;
    int len=len1+len2;
    int[] arr=new int[len];
    //定义两个指针:start1和start2,start1表示数组1的移动下标,start2表示数组2的移动下标
    int start1=0;
    int start2=0;
    //ans表示最终的结果:中位数
    double ans=0;
    for(int i=0;i<len;i++){
        if(start1<len1&&start2<len2){//数组1和数组2都没有到最后
            if(nums1[start1]<=nums2[start2]){//根据start1和start2位置数的大小,确定将那个数                                                插入到新数组中,并将指针移动到下一个位置。
                arr[i]=nums1[start1];
                start1++;
            }else{
                arr[i]=nums2[start2];
                start2++;
            }
        }else if(start1<len1){//数组2已经遍历完成了,将数组1剩余的值复制到新数组中
            arr[i]=nums1[start1];
            start1++;
        }else{//数组1已经遍历完成了,将数组2剩余的值复制到新数组中
            arr[i]=nums2[start2];
            start2++;
        }
    }
    if(len%2==1){
        ans=arr[len/2];
    }else{
        ans=(arr[len/2-1]+arr[len/2])/2.0;
    }
    return ans;
}

执行用时:3 ms, 在所有 Java 提交中击败了82.29% 的用户

内存消耗:39.5 MB, 在所有 Java 提交中击败了88.64% 的用户

Version2

待续。。。

标签:arr,int,start1,第四,2021,数组,第四天,nums1,nums2
来源: https://blog.csdn.net/qq_21388535/article/details/116404469

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有