我最近开始进行一些 Codility 编码测试,到目前为止,我的代码性能几乎每次都为 0%。
这个https://codility.com/programmers/lessons/6-sorting/distinct/是查找数组中不同整数数量的非常简单的代码。
我的代码在语法上是正确的并且可以正常工作,但是我可以做什么来优化性能?
这是我的代码:
function solution(A) {
var res = []
var len = A.length
for(var i=len;i--;){
if(!res.includes(A[i])){
res.push(A[i])
}
}
return res.length
}
最佳答案
感谢@Slai 和@le_m 的额外指点。
SET: 从数据结构的 Angular 来看,O(n)
空间复杂度和 O(n*log(n))
时间复杂度。但似乎 V8 以不同的方式进行设置插入归结为 O(1)
,使得时间复杂度为 O(n)
。
MAP: O(N) 空间复杂度,但我认为时间复杂度比其他复杂度要低一些,可能是 O(N),因为每个键查找都需要 O(1)
有关 Javascript 集合复杂性的更多信息
Javascript ES6 computational/time complexity of collections
es6 Map and Set complexity, v8 implementation
// USING ES6 SET
// ONE LINER
// console.log((new Set(arr)).length)
// BREAKDOWN
const arr = [1, 2, 3, 2, 1, 4, 1];
var setArr = new Set();
arr.forEach(number => setArr.add(number))
console.log([...setArr])
// USING ES6 MAP
let map = new Map();
arr.forEach(number => map.set(number, "PRESENT"))
console.log([...map.keys()])
关于javascript - 超时错误。此代码片段中的性能问题是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47614449/