题目:合并两个有序数组
示例
输入:[ 2, 8, 10, 13],[ 3, 7, 12]
输出:[ 2, 3, 7, 8, 10, 12, 13]
答案
方法一
利用 concat 合并两个数组然后排序。
let num1 = [2, 8, 10, 13],
num2 = [3, 7, 12];
const res = num1.concat(num2).sort((a, b) => a - b);
console.log(res);
方法二
// 需要创建一个新数组
function merge(arr1, arr2) {
const n = arr1 && arr1.length;
const m = arr2 && arr2.length;
let res = [];
let i = 0,
j = 0;
while (i < n && j < m) {
if (arr1[i] < arr2[j]) {
res.push(arr1[i++]);
} else {
res.push(arr2[j++]);
}
}
while (i < n) {
res.push(arr1[i++]);
}
while (j < m) {
res.push(arr2[j++]);
}
return res;
}
// 不创建新数组
function merge(nums1, nums2) {
let len1 = nums1.length - 1;
let len2 = nums2.length - 1;
let len = nums1.length + nums2.length - 1;
while (len1 >= 0 && len2 >= 0) {
let val1 = nums1[len1],
val2 = nums2[len2];
if (val1 > val2) {
nums1[len] = val1;
len1--;
} else {
nums1[len] = val2;
len2--;
}
len--;
}
return nums1;
}