合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出:
[1,2,2,3,5,6]
我的想法:
将两个数组先合并,然后排序去零即可
遇到的坑:
一开始想用es6的展开语法...
来合并两个数组,发现不符合题意,题目意思是要用能改变原数组的方法。
题意:
- @return {void} Do not return anything, modify nums1 in-place instead.
回去看了下文档,...
不改变原来的数组,如果对...
的具体说明感兴趣可以看文章末尾。
代码:
const merge = function (nums1, m, nums2, n) {
for (let i = 0; i < n; i++) {
nums1[m + i] = nums2[i]
}
nums1 = nums1.sort(sortNum)
while (nums1[0] == 0 && nums1.length > m + n) {
nums1.shift()
}
return nums1
}
leetcode上最快的解法:
思路:
先去零再遍历nums2数组合并
函数说明:
splice()
- splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。
会修改原数组。
slice()
- slice() 方法返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。
slice返回制定范围内的数组
findIndex()
- 遍历数组,参数是一个函数,遍历到当前值,如果当前值符合函数条件的返回这个值的索引。
代码实现:
var merge = function(nums1, m, nums2, n) {
nums1.splice(m, nums1.length-m)
nums2.slice(0, n).forEach(value => {
const index = nums1.findIndex(num => num > value);
if(index < 0){
nums1.splice(nums1.length, 0, value)
} else {
nums1.splice(index, 0, value)
}
});
};
...
es6展开符
网友评论