这里也给大家一个实用的网站,能观察到代码每一步的走向
https://pythontutor.com/javascript.html#mode=edit
不使用额外数组的情况下,合并两个有序数组
const arr1 = [2, 6];
const arr2 = [1, 3, 7];
function merArr(a, b) {
let aLength = a.length - 1; //使之能取a数组中最大项 1
let bLength = b.length - 1; //使之能取b数组中最大项 2
let allLength = aLength + bLength + 1; //作为结果数组的索引 4
//循环b数组
while (bLength >= 0) {
if (a[aLength] > b[bLength]) {
a[allLength] = a[aLength];
aLength--;
} else {
a[allLength] = b[bLength];
bLength--;
}
allLength--;
}
return a;
}
console.log(merArr(arr1, arr2));
空间复杂度:没有使用额外的数组,只使用了常数级别的额外空间,因此空间复杂度为O1
时间复杂度:我们只遍历了a数组和b数组的所有元素,所以时间复杂度为O(m+n) (m和n就是a和b的长度)