ES6数组交换的时间/空间复杂度是什么?

5

使用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)。

即使我们在创建一个全新的数组来进行解构和赋值,由于我们只是交换了几个元素,所以时间和空间复杂度仍然是常数级别的。这样说对吗?


数组的第一个方法,即数组解构需要更多时间。 - Maheer Ali
1个回答

3
很可能更接近于这样:
var temp1 = a[1];
var temp2 = a[0];
a[0] = temp1;
a[1] = temp2;

虽然在只交换两个值时,temp1 真的不需要,但在更一般的情况下,我不会指望编译器能够判断哪些临时变量是必要的,哪些不是。

但不管怎样,复杂度都是 O(n),其中 n 是您要交换的元素数量。任何中间临时变量只是一个常数因子,它们不会影响时间复杂度。

我认为这确实会影响空间复杂度-- 如果编译器可以检测到只需要一个临时变量,那么它的空间复杂度将是 O(1)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接