因此,您可以使用带有以下表示法的ES6交换数组元素:
let a = [1,2,3,4];
[a[0],a[1]] = [a[1],a[0]];
console.log(a); // [2,1,4];
但是我很好奇知道时间和空间的复杂性.
如果仅仅是语法糖:
var temp = a[0];
a[0] = a[1];
a[1] = temp;
然后我想它在时间和空间上都是O(1).
我想即使我们正在创建一个全新的数组来进行分解和赋值,由于我们只交换了几个元素,所以它们仍然是不变的.听起来对吗?
最佳答案
它可能更像是:
var temp1 = a[1];
var temp2 = a[0];
a[0] = temp1;
a[1] = temp2;
尽管仅在交换两个值时并不需要temp1,但我不希望编译器能够确定需要哪些临时变量,而在一般情况下不需要.
但无论哪种方式,它都是O(n),其中n是您要交换的元素数.任何中间临时变量都是一个恒定因素,它们不会影响时间复杂度.
我想这确实会影响空间的复杂性-如果编译器可以检测到只需要一个临时空间,那就是O(1)空间.