有没有一种方法可以使我的代码更具性能?

时间:2019-04-05 20:17:55

标签: javascript node.js

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

查询的每一行表示范围(quers [i] [0]是开头,而querys [i] [1]是arr []的最终范围)。并加上arr的值(queries [i] [2])。因此,如果查询有三行,则需要执行三个操作。此函数从此arr返回max元素。

是否有一些东西可以改善这段代码?

我认为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
}

1 个答案:

答案 0 :(得分:0)

每次循环,都对数组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
}