首页 > 解决方案 > 有没有办法在我的代码中提高性能?

问题描述

我必须改进我的功能,因为当 arr 或查询太大时,由于超时而被终止。在长度为 n 的预定义数组中执行一些操作是一个简单的函数,并且查询定义了要对数组 (arr) 执行的操作。

查询的每一行表示范围(queries[i][0] 是开始,query[i][1] 是 arr[] 的最终范围)。以及对 arr 求和的值(查询 [i] [2])。所以,如果查询有三行,我们要做三个操作。此函数返回此 arr 中的最大元素。

有什么可以改进此代码的吗?

我认为这可能是问题所在Array(n).fill(0)Math.max.apply(Math, arr)

否则,在while循环中,是否有某种方法可以进行一次验证和操作,而不是遍历数组并在每个元素处进行验证?谢谢

 function arrayManipulation(n, queries) {
    var a;
    var b;
    var k;
    var i = 0;
    var arr = Array(n).fill(0);
    while (queries[i] != undefined) {
        a = (queries[i][0] - 1);
        b = (queries[i][1] - 1);
        k = queries[i][2];
        for (a; a <= b; a++) {
            arr[a] = (arr[a] + k)
        }i++
    }
    k = Math.max.apply(Math, arr);
    return k
}

标签: javascriptnode.js

解决方案


循环的每次迭代,您重复对数组 的相同查找queries[i]四次:

    while (queries[i] != undefined) {
        a = (queries[i][0] - 1);
        b = (queries[i][1] - 1);
        k = queries[i][2];
//...

for对循环执行相同操作:

var query;
for (var i = 0, len = queries.length; i < len; i++) {
   query = queries[i];
   a = query[0] - 1;
   b = query[1] - 1;
   k = query[2];
// ...the rest of the loop
}

推荐阅读