JavaScript-ES6阵列交换的时间/空间复杂度是多少?

因此,您可以使用带有以下表示法的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)空间.

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ "TOC" 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...