我必须改进我的功能,因为当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
}
答案 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
}