LeetCode算法面试题汇总之合并两个有序数组

8 篇文章 0 订阅

LeetCode算法面试题汇总

合并两个有序数组
在这里插入图片描述
一开始想着利用System.arraycopy()+Arrays.sort()简单地实现,没想到太low了就换了一种方法。既然她已经是有序的,那么利用它的这个特性,我们就可以省了再次排序的浪费,直接将nums2中的数通过比较放到nums1中。
1.System.arraycopy()方法
(1) 解析

public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

其中:
src是源数组
srcPos是源数组复制的起始位置
dest是目标数组
destPos是目标数组接收复制数据的起始位置
length是复制的长度(源数组中从复制起始位置srcPos开始需要复制的长度)

可以看到,该方法是本地方法,我们不能更深一步的了解其中的原理,但是我们可以知道其作用就是将源数组从起始位置srcPos开始将length长度的元素复制到目标数组,目标数组从destPos位置开始接收复制元素。

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
       int index1=m-1;
       int index2=n-1;
       int index=m+n-1;
       while(index1>=0 || index2>=0)
           {
               if(index1>=0&&index2<0) break;
               else if(index1<0&&index2>=0) nums1[index--]=nums2[index2--];
               else if(nums1[index1]>nums2[index2]) nums1[index--]=nums1[index1--];
               else nums1[index--]=nums2[index2--];
           }
       }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值