javascript - 超时错误。此代码片段中的性能问题是什么?

标签 javascript performance optimization

我最近开始进行一些 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
}

The performance errors i'm getting from codility

最佳答案

感谢@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/

相关文章:

javascript - 预注册 Lambda 触发器 autoConfirmUser 不起作用

php - 计算固定 map 大小和动态对象位置的比例因子

javascript - 如何将事件从 Ember.js View 发送到其 Controller

performance - 高效计算光流参数 - MATLAB

c# - 推荐的 ILNumerics 优化包

performance - 为什么 Scala 代码的一个小改动会对性能产生如此巨大的影响?

python - Scipy 优化曲线拟合无法正常工作

javascript - js canvas - 使用特定文本权重计算文本宽度

java - 获取所有 spring 服务的性能指标的最快方法是什么?

mysql - 降低 MySQL 命令/作业的优先级(添加索引/其他命令)?