给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
为了解决这个问题,我们可以使用双指针技术。由于nums1和nums2都是有序的,我们可以从每个数组的末尾开始,并使用另一个指针从nums1的末尾开始来填充元素。
以下是具体步骤:
- 初始化三个指针
p1,p2和p。 p1指向nums1的实际元素的末尾。p2指向nums2的末尾。p指向nums1的末尾。- 比较
nums1[p1]和nums2[p2]的值,将较大的值放在nums1[p]的位置。 - 移动相应的指针。
- 重复步骤5-6,直到
p2小于0。
下面是实现这一逻辑的代码:
function merge(nums1, m, nums2, n) {
let p1 = m - 1;
let p2 = n - 1;
let p = m + n - 1;
while (p2 >= 0) {
if (p1 >= 0 && nums1[p1] > nums2[p2]) {
nums1[p] = nums1[p1];
p1--;
} else {
nums1[p] = nums2[p2];
p2--;
}
p--;
}
}
// 例子
let nums1 = [1, 2, 3, 0, 0, 0];
let m = 3;
let nums2 = [2, 5, 6];
let n = 3;
merge(nums1, m, nums2, n);
console.log(nums1); // [1,2,2,3,5,6]
需要注意的是,函数参数中的 m 和 n 分别表示 nums1 和 nums2 的实际元素数量。nums1 的长度至少为 m + n,并且其后面的位置用于存储 nums2 的元素。