合并两个有序数组(js实现,LeetCode:88)
这道题在code区域有这么一句话
这说明这道题实际要做的是对nums1的原地修改
在nums1中其实已经提供了空位,所以这里使用快慢指针来做原地修改
/**
* @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) {
let fast = m - 1
let slow = n - 1
for (let i = m + n - 1; i >= 0; i--) {
if (fast < 0) {
nums1[i] = nums2[slow]
slow -= 1
} else if (slow < 0) {
nums1[i] = nums1[fast]
fast -= 1
}
else if (nums1[fast] < nums2[slow]) {
nums1[i] = nums2[slow]
slow -= 1
} else {
nums1[i] = nums1[fast]
fast -= 1
}
}
console.log(nums1)
};
由于题目给定了nums1与nums2是非递减顺序排列的整数数组,所以这里选择使用倒序遍历数组以保证数组的非递减顺序排列