javascript - 有没有办法在我的代码中提高性能?
问题描述
我必须改进我的功能,因为当 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
}
解决方案
循环的每次迭代,您重复对数组 的相同查找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
}
推荐阅读
- gradle - 如何在与 gradle 的战争中排除文件
- reactjs - 使用 React Router 路由目录
- excel - TCD 数据透视表 ADODB 访问
- nuget - “...”处的 V2 提要返回了意外的状态代码“503 服务不可用”
- java - 谷歌地图是空白的,底部只有标志
- docker - VS2017 docker-compose vs docker-compose.override?
- javascript - javascript 表单通过 2 个函数获取值
- python - 在 Jupyter 笔记本中执行单元后自动运行命令
- javascript - 在javascript中将base64 url转换为二进制
- android - 是否可以在硬件层面抵消 Android 的 Vsync 时序?