🌝花瓶摆设的算法之旅(js)

69 阅读1分钟

这里也给大家一个实用的网站,能观察到代码每一步的走向

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的长度)