LeetCode刷题笔记(Java版)----4. 寻找两个有序数组的中位数

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

解法1:比较容易想到的办法,由于对时间复杂都有一定的要求,空间换时间。新建一个新的数组,将两个数组有序插入到新的数组中。最终如果时奇数个的话直接返回新数字的中间数,偶数的话返回数组中间两个数的平均数。

执行用时 : 11 ms, 97.73%。内存消耗 : 46.1 MB, 97.20% 。

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1 = nums1.length;
        int len2 = nums2.length;
        //记录nums1,nums2,nums的下标。
        int index1=0,index2=0,index=0;
        int[] nums = new int[len1+len2];
        //将nums1,2有序插入到nums中
        while(index1<len1 && index2<len2 &&index<=len){
            nums[index++]=nums1[index1]<nums2[index2]?nums1[index1++]:nums2[index2++];
        }
        //连个if用于其中一个数组插入完毕,剩余数组继续插入。
        if(index1!=len1){
            while(index1<len1)
                nums[index++]=nums1[index1++];
        }
        if(index2!=len2){
            while(index2<len2)
                nums[index++]=nums2[index2++];
        }
        //为奇数直接返回中间数,#注意,此时index并非数组下标,因为插入完毕后执行了index++,
        //index是数组长度
        if(index%2!=0)
            return nums[index/2];
        //为偶数时
        return ((double)(nums[index/2-1]+nums[index/2]))/2;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值