javascript - 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)。
我想即使我们正在创建一个全新的数组来进行解构然后赋值,仍然会保持不变,因为我们只交换了几个元素。这听起来对吗?
解决方案
它可能更像:
var temp1 = a[1];
var temp2 = a[0];
a[0] = temp1;
a[1] = temp2;
尽管temp1
仅交换两个值时并不真正需要,但我不希望编译器能够确定需要哪些临时变量,而在更一般的情况下不需要。
但无论哪种方式,它都是,您要交换的元素数量在O(n)
哪里。n
任何中间临时变量只是一个常数因素,它们不会影响时间复杂度。
我想它确实会影响空间复杂度——如果编译器可以检测到只需要一个临时文件,那就是O(1)
空间。
推荐阅读
- html - 你能把嵌套列的弹性盒做得尽可能小但尽可能宽吗
- angular - Angular - 反应式表单 - FormGroupName 内的 FormGroupName
- ios - 如何从 iOS 应用程序的 Google 日历访问数据
- apache-spark - apache spark和hadoop之间的jar冲突
- export - 使用 JsPDF 将 openlayers 当前地图视图导出为 PDF
- java - 如何旋转对象以始终面对鼠标?
- javascript - React 组件在更新到状态后不会重新渲染
- sql - 我在使用闪回时出错
- firebase - 创建新的 Firebase 项目:“创建项目时出现未知错误”
- python - 这段代码中的递归究竟是如何工作的