我正在研究这个函数,它必须返回添加 a
和 b
n
次的所有可能值,例如如果 n = 1
那么可能的值将是 a + a
a + b
和 b + b
。下面的功能有效,但它太慢了,我想优化它。有什么建议么?非常感谢!
function processData(n, a, b){
var ans = [0];
for(var i = 0; i < n; i++){
var temp = [];
for(var j = 0; j < ans.length; j++){
var aa = ans[j] + a;
if(temp.includes(aa) === false){
temp.push(aa);
}
var bb = ans[j] + b;
if(temp.includes(bb) === false){
temp.push(bb);
}
}
ans = temp;
}
ans.sort(function(a, b){return a - b});
return ans;
}
最佳答案
function processData(n, a, b) {
var ans = [];
if (a == b) {
for (var i=0; i<n+1; i++) {
ans.push(a * n);
}
return ans;
} else if (a > b) {
var temp = a;
a = b;
b = temp;
}
var diff = b - a;
for (var i=0; i<n+1; i++) {
ans.push(a * n + diff * i);
}
return ans;
}
好的,这是迄今为止最有效的解决方案。我刚刚在 fiddle 上测试过它.
所有其他三个解决方案都大大优于您的解决方案。我的比@abc123 的好,因为不需要排序,比@georg 的好,因为不需要使用集合或排序。
关于javascript - 需要优化功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40682247/