【发布时间】:2020-05-29 16:55:43
【问题描述】:
我正在解决一个旋转数组的 leetcode 问题。我通过使用两个 for 循环来解决 O(N) 问题,但是我的运行时间比这个解决方案低。
我的解决方案:运行时间 80 毫秒
var rotate = function(nums, k) {
let a = Array.from({length:nums.length})
for (let i = 0; i < nums.length; i++) {
a[(i + k) % nums.length] = nums[i];
}
for (let i = 0; i < nums.length; i++) {
nums[i] = a[i];
}
};
其他解决方案:运行时间 52ms
var rotate = function(nums, k) {
return nums.splice(0,0,...nums.splice(nums.length - k))
};
这怎么可能。据我所知,拼接是 O(N) 并且在这个解决方案中拼接也被再次用于拼接。所以这个解决方案应该是 O(N2) 而我的解决方案应该比这个更快?
【问题讨论】:
-
你对 O(n2) 有什么推断? Javascript首先确定参数的结果是O(n),然后对这个结果执行O(n)操作,所以你仍然有O(n)的复杂性。无论如何,为什么要估计您是否可以分析这两种解决方案并确切知道执行所需的资源。
标签: javascript arrays splice