双指针
const merge = (nums1, m, nums2, n) => {
let p1 = 0;
let p2 = 0;
let res = [];
while (p1 < m || p2 < n) {
if(p1 === m) {
res.push(nums2[p2++]);
} else if(p2 === n) {
res.push(nums1[p1++]);
}else if(nums1[p1] <= nums2[p2]) {
res.push(nums1[p1++]);
} else if (nums1[p1] > nums2[p2]) {
res.push(nums2[p2++]);
}
}
for(let i = 0; i < res.length; i++) {
nums1[i] = res[i];
}
}
逆向双指针
const merge = (nums1, m, nums2, n) => {
let p1 = m-1;
let p2 = n-1;
let tail = m + n - 1;
let cur = 0;
while (p1 > -1 || p2 > -1) {
if(p1 === -1) {
cur = nums2[p2--];
} else if(p2 === -1) {
cur = nums1[p1--];
}else if(nums1[p1] <= nums2[p2]) {
cur = nums1[p1--];
} else if (nums1[p1] > nums2[p2]) {
cur = nums2[p2--];
}
nums1[tail--] = cur;
}
}