题目
https://leetcode-cn.com/problems/merge-sorted-array/
思路
- 用双指针,分别指向两个数组,比较然后push到一个新的数组中,最后在把新数组的值赋值给nums1
- 反向双指针:对两个数组进行比较,较大值放在num1数组后面,就不用使用到O(m+n)的空间复杂度
code
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
var merge = function(nums1, m, nums2, n) {
// 双指针
// if(n == 0) return nums1;
// let p1, p2;
// p1 = p2 = 0;
// let arr = [];
// while (p1<m && p2<n){
// if (nums1[p1]>nums2[p2]){
// arr.push(nums2[p2]);
// p2++;
// }else{
// arr.push(nums1[p1]);
// p1++;
// }
// }
// if (p1 == m){
// // console.log(arr.concat(nums2.slice(p2)));
// arr = arr.concat(nums2.slice(p2));
// }else if (p2 == n){
// arr = arr.concat(nums1.slice(p1));
// }
// for (let i=0; i<m+n; i++){
// nums1[i] = arr[i];
// }
// 反向指针
let p1 = m-1;
let p2 = n-1;
let index = m+n-1;
while (p1 >=0 && p2 >=0){
if (nums1[p1]>nums2[p2]){
nums1[index] = nums1[p1];
p1--;
}else{
nums1[index] = nums2[p2];
p2--;
}
index--;
}
if (p1 <0){
for (let i=index; i>=0; i--){
nums1[index--] = nums2[i];
}
}else if(p2 < 0){
for (let i=index; i>=0; i--){
nums1[index--] = nums1[i];
}
}
};