力扣(LeetCode) 链接:https://leetcode.cn/problems/merge-sorted-array/description/
空间复杂度 O(1)
var merge = function (nums1, m, nums2, n) {
let l = m - 1,
r = n - 1
let tail = n + m - 1
let cur
while (l >= 0 || r >= 0) {
if (l === -1) {
cur = nums2[r--]
} else if (r === -1) {
cur = nums1[l--]
} else if (nums1[l] > nums2[r]) {
cur = nums1[l--]
} else {
cur = nums2[r--]
}
nums1[tail--] = cur
}
}
额外空间
var merge = function (nums1, m, nums2, n) {
let res = []
let cur
let l = 0,
r = 0
while (l < m && r < n) {
if (nums1[l] > nums2[r]) {
cur = nums2[r++]
} else {
cur = nums1[l++]
}
res.push(cur)
}
console.log(res)
if (l < m) {
res = res.concat(nums1.slice(l, m))
}
if (r < n) {
res = res.concat(nums2.slice(r, n))
}
for (let i = 0; i < res.length; i++) {
nums1[i] = res[i]
}
}
合并两个数组
function mergeArr(arr1, arr2) {
// 初始化两个指针,分别指向 arr1 和 arr2
let i = 0,
j = 0
// 初始化结果数组
const res = []
// 缓存arr1的长度
const len1 = arr1.length
// 缓存arr2的长度
const len2 = arr2.length
// 合并两个子数组
while (i < len1 && j < len2) {
if (arr1[i] < arr2[j]) {
res.push(arr1[i])
i++
} else {
res.push(arr2[j])
j++
}
}
// 若其中一个子数组首先被合并完全,则直接拼接另一个子数组的剩余部分
if (i < len1) {
return res.concat(arr1.slice(i))
} else {
return res.concat(arr2.slice(j))
}
}