算法第二十一天 合并两个有序数组(简单题)

题目描述:

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例描述:

分析题目:

题目的意思就是将两个数组合并起来,但是数组1给的长度包含了数组2的长度,也就是数组1的长度是m+n,m是数组1的长度,而n则是数组2的长度,有问题的地方在于如何将数组1先还原为m长度,之后求解

解题思路:

首先将数组1的长度确定为m,删除掉多余的数组值,之后将数组2的值全部添加到数组1中,并且要求顺序排列。

注意:题目要求是输出数组1 ,所以添加到数组1

var merge = function(nums1, m, nums2, n) {
    for(var i=m+n-1;i>=m;i--){
        nums1.splice(i,1)
    }
   for(var i=0;i<n;i++){
       nums1.push(nums2[i])
   }
    nums1.sort(function(a,b){
        return a-b
    })
    return nums1
};

代码分析:

运用到了删除函数、添加函数以及排序函数

在这里重点复习一下排序函数

升序排列:


    nums1.sort(function(a,b){
        return a-b
    })

降序排列:

    nums1.sort(function(a,b){
        return a-b
    })

但是这样的代码还是很麻烦的,所以能否优化一下代码呢?

这里需要补充(复习)一个知识点,也就是splice函数的用法,他不但能够删除,还能替换添加

splice(index,len,[item])

它也可以用来替换/删除/添加数组内某一个或者几个值(该方法会改变原始数组)

index:数组开始下标         

len: 替换/删除的长度       

item:替换的值,删除操作的话 item为空

在这里我们需要用到的就是他的替换的功能,直接将他后面的都替换掉就可以啦

所以代码如下:(大部分的思路是相同的)

var merge = function(nums1, m, nums2, n) {
    for(var i=0;i<n;i++){
        nums1.splice(m+i,1,nums2[i])
    }
    
    nums1.sort(function(a,b){
        return a-b
    })
    return nums1
};

这样做的效率就提升了很多

从时间和空间的角度来看都提升了很多

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值