数组中JavaScript传播语法的时间复杂度是多少?

时间:2019-07-15 01:30:32

标签: javascript arrays spread

我当时是 leetcoding ,突然间我想知道在 Array 中传播的时间复杂度是多少。我尝试研究它,但是没有找到任何答案,或者仅仅是我对谷歌搜索技术的掌握不好。

我知道这只是一个基本的问题,但是我想知道在 JavaScript 中在 Array 中使用扩展的时间复杂度是多少?它是线性的:O(n)?还是常数:O(1)?

以下语法示例:

let lar = Math.max(...nums)

感谢有人可以帮助您。 预先感谢。

1 个答案:

答案 0 :(得分:1)

Spread调用有关对象的[Symbol.iterator]属性。对于数组,这将遍历数组中的每个项目,调用数组迭代器的.next()直到迭代器耗尽为止,从而导致O(N)的复杂性。

出于完全相同的原因,for..of(也称为[Symbol.iterator])循环也是O(N)

const arr = [1, 2, 3];
for (const item of arr) {
  console.log(item);
}

以实时示例为例,看看下面的代码片段需要多少时间才能执行:

const arr = new Array(3e7).fill(null);
const t0 = performance.now();
const arr2 = [...arr];
console.log(performance.now() - t0);

(如果该操作为O(1),则几乎是瞬时的,但不是)

参数扩展与数组扩展不同,但是它使用same operation(在迭代器中迭代直到耗尽为止),因此具有相同的复杂性。

  

对于函数调用:

myFunction(...iterableObj);