leetcode刷题笔记4---寻找两个正序数组的中位数(Java实现)

题目要求:

在这里插入图片描述

算法分析:

这个题目实现起来较为简单,首先把两个数组合并成一个数组,再对这个新的数组排序(题目中给的正序感觉可能会有更节省时间的数据结构,我在此处并没有考虑),排序结束后直接按下标取数。要注意的是新数组的元素个数奇偶情况不同计算式也不同,直接if判断即可。
在第一次编码中,我在合并数组时没有写for循环,而是用了一个函数System.arraycopy(),执行结果是正确的,但是提交后就报错,目前对这个报错不明觉厉。修改成经典for循环后就正确了。

源代码:

最开始运行失败的代码:

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        double []nums3 = new double[nums1.length + nums2.length];
        System.arraycopy(nums1,0,nums3,0,nums1.length);
        System.arraycopy(nums2,0,nums3,nums1.length,nums2.length);   //合并数组
        Arrays.sort(nums3);    //对合并数组排序
        if(nums3.length%2==0){
            return (nums3[nums3.length/2]+nums3[nums3.length])/2;
        }
        else{
            return nums3[(nums3.length-1)/2];
        }
    }
}

给出的编译错误提示:
在这里插入图片描述
修改后的代码:

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        double []nums3 = new double[nums1.length + nums2.length];
        for(int i=0; i<nums1.length; i++){
            nums3[i] = nums1[i];
        } 
        for(int i=0; i<nums2.length; i++){
            nums3[nums1.length + i] = nums2[i];
        }//合并数组
        Arrays.sort(nums3);    //对合并数组排序
        if(nums3.length%2==0){
            return (nums3[nums3.length/2]+nums3[nums3.length/2-1])/2;
        }
        else{
            return nums3[(nums3.length-1)/2];
        }
    }
}

结果:
在这里插入图片描述

笔记:

  • 数组的合并:先放一个我觉得讲的很不错的链接—>Java中如何把两个数组合并为一个。第一次编译失败的原因是使用了System.arraycopy(),不知为什么会判错,但是这里还是想记录一下这个方法的用法:
  • System.arraycopy():Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制,这一点可以类比python中的sort方法和sorted()函数的区别。System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。对于一维数组来说,这种复制属性值传递,修改副本不会影响原来的值。对于二维或者一维数组中存放的是对象时,复制结果是一维的引用变量传递给副本的一维数组,修改副本时,会影响原来的数组。用法是:System.arraycopy(Object src,int srcPos, Object dest, int destPos,int length),下面这张图为复制过程(侵删)在这里插入图片描述
  • Arrays.sort():是Arrays类中的sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时。括号内是数组名,也就是在内存中的首地址。常用方法:
    -Arrays.sort(int[] a)为将一个整型数组a由小到大排序。
    -Arrays.sort(int[] a, cmp)为将一个整型数组a由大到小排序。
    -Arrays.sort(int[] a, int fromIndex, int toIndex)为对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序。

感想:

对java中的数组合并和排序算法有了一定的了解,但是第一次编译错误原因目前还不知道,以及题目中给的正序条件尚未用到,应该会有优化的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值