题目描述:
给你两个按 非递减顺序 排列的整数数组 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
};
这样做的效率就提升了很多
从时间和空间的角度来看都提升了很多