首页 > 解决方案 > ES6 数组交换的时间/空间复杂度是多少?

问题描述

因此,您可以使用 ES6 使用以下符号交换数组元素:

let a = [1, 2, 3, 4];
[a[0], a[1]] = [a[1], a[0]];
console.log(a); // [2, 1, 3, 4];

但我很想知道它的时间/空间复杂性。

如果它只是语法糖:

var temp = a[0];
a[0] = a[1];
a[1] = temp;

然后我想它在时间和空间上都是 O(1)。

我想即使我们正在创建一个全新的数组来进行解构然后赋值,仍然会保持不变,因为我们只交换了几个元素。这听起来对吗?

标签: javascriptalgorithm

解决方案


它可能更像:

var temp1 = a[1];
var temp2 = a[0];
a[0] = temp1;
a[1] = temp2;

尽管temp1仅交换两个值时并不真正需要,但我不希望编译器能够确定需要哪些临时变量,而在更一般的情况下不需要。

但无论哪种方式,它都是,您要交换的元素数量在O(n)哪里。n任何中间临时变量只是一个常数因素,它们不会影响时间复杂度。

我想它确实会影响空间复杂度——如果编译器可以检测到只需要一个临时文件,那就是O(1)空间。


推荐阅读