88. 合并两个有序数组
1、直接合并后排序
将nms2放到nums1的后面,然后进行排序
var merge = function(nums1, m, nums2, n) {
// 将splice将nums2的值放到nums1的后面
// 从m位置开始删除nums1.length-m的元素,然后将nums2添加到最后
nums1.splice(m,nums1.length,...nums2);
// 将nums1进行排序,修改的是原来的数组,所以不需要返回
nums1.sort((a,b)=>(a-b));
};
2、逆向双指针
逆向双指针图解
var merge = function(nums1, m, nums2, n) {
// 设置三个指针,分别指向nums1和nums2的数字部分的尾部 + nums1数组的尾部
var i = m-1,
j = n-1,
k = m+n-1;
// 必须把所有的条件判断都写到一起,这样满足一个条件就会结束本次循环。不会继续往下执行。
// 其中一个数组不为空,就可以进行下面的循环
while(i >= 0 || j >= 0){
if(i<0){
// nums1为空的情况,将nums2的所有值放到nums1中
nums1[k--] = nums2[j--];
}
else if(j<0){
// nums2为空的情况,将nums1的所有值放到nums1中
if(j<0) nums1[k--] = nums1[i--];
}
// 两者均不空的时候
// 如果数组2中的数字大,就放到数组1的末尾.并且元素需要移动,所以需要自减操作
else if(nums1[i] < nums2[j]){
nums1[k--] = nums2[j--];
}
else{
// 数组1中的数字大,就移动数组1中的数字到数组1的末尾
nums1[k--] = nums1[i--];
}
}
return nums1;
};
3、js语法
(… )的用法:它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开
… 的用法