合并两个有序数组

Bernie


Bernie
合并两个有序数组
思路:
- 从后往前遍历,从大到小依次放入 nums1 中
- 用 p1, p2 分别指向 nums1, nums2 的最后一个元素
- 用 p 指向 nums1 的最后一个元素
- 比较 p1, p2 的大小,将较大的元素放入 nums1 的最后一个位置,p 向前移动一位,p1 或 p2 向前移动一位
- 如果 p1 或 p2 有一个小于 0,则将另一个数组剩余的元素放入 nums1 中
typescript 解法
/**
Do not return anything, modify nums1 in-place instead.
*/
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
let p1 = m - 1;
let p2 = n - 1;
for (let i = m + n - 1; i >= 0; i--) {
if (p1 < 0) {
nums1[i] = nums2[p2];
p2--;
} else if (p2 < 0) {
nums1[i] = nums1[p1];
p1--;
} else if (nums1[p1] < nums2[p2]) {
nums1[i] = nums2[p2];
p2--;
} else {
nums1[i] = nums1[p1];
p1--;
}
}
}
go 解法
func merge(nums1 []int, m int, nums2 []int, n int) {
p1 := m - 1;
p2 := n - 1;
for j := m + n - 1; j >= 0; j -- {
if p1 < 0 {
nums1[j] = nums2[p2]
p2 --
} else if p2 < 0 {
nums1[j] = nums1[p1]
p1 --
} else if nums1[p1] > nums2[p2] {
nums1[j] = nums1[p1]
p1 --
} else {
nums1[j] = nums2[p2]
p2 --
}
}
}