我有一个function
,它有一个嵌套的for loop
。随着function
迭代更多数据,它开始变慢。如何才能最好地优化此功能,使其运行速度更快?
function rubicoGVB(arr, range) {
var res = [];
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if ((arr[i] + arr[j]) / range < 16487665) {
res.push(arr[i]);
}
}
}
return res.length;
}
答案 0 :(得分:2)
(Fast Snail in this comment描述了你可以做出的最大改进:你不需要res
数组只是为了返回它的长度;只需使用一个计数器。以下是其他改进你可以做。)
看看这些循环,你可以做的很少:
缓存数组的长度,
缓存arr[i]
而不是在j
循环中重复查找
...这些是最小的(但是真实的)改进,请参阅下面的len
和entry
:
function rubicoGVB(arr, range) {
var res = [];
var len = arr.length;
var entry;
for (var i = 0; i < len; i++) {
entry = arr[i];
for (var j = i + 1; j < len; j++) {
if ((entry + arr[j]) / range < 16487665) {
res.push(entry);
}
}
}
return res.length;
}