我正在处理此功能,必须返回添加a
和b
n
次的所有可能值,例如n = 1
,然后可能的值为{ {1}} a + a
和a + b
。下面的功能有效,但它太慢了,我想优化它。有什么建议?非常感谢!
b + b
答案 0 :(得分:4)
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更好,因为不需要使用set或sort。
答案 1 :(得分:2)
这是一个获取a和b的位置的提案。
function combine(left, right) {
function carry() {
return c.reduceRight(function (r, _, i, o) {
return r && !(o[i] = (o[i] + 1) % left.length);
}, 1);
}
var c = Array.apply(null, { length: right.length }).map(function () { return 0; }),
result = [];
do {
result.push(c.reduce(function (r, a, i) {
r[left[a]].push(right[i]);
return r;
}, left.reduce(function (r, a) {
r[a] = [];
return r;
}, {})));
} while (!carry());
return result;
}
console.log(combine(['a', 'b'], [1, 2, 3]));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
只是为了披露,答案是我的答案之一,给出了一个更详细的问题,但不完全是:Find all combinations of two arrays
答案 2 :(得分:2)
这是一个简洁的ES6功能:
MATCH g=(p:Person)-[f:factoid]-(u:Source) WHERE f.name[0] STARTS WITH =' A' RETURN f.name[0];
&#13;
答案 3 :(得分:1)
愿这更快
function process(a,b,n){
out=[];
//get difference
f=a-b;
var last=b*n;
for(i=0;i<n;i++){
out.push(last);
last+=f;
}
return out;
}
如果这是正确的话,我不会感到害羞,因为我只是测试了几个值。我想你想要别的。
答案 4 :(得分:1)
// a+a 2 a 0 b
// a+b, b+a 1a 1b
// b+b 0a 2b
// a+a+a, 3a 0b
// a+b+a, a+a+b 2a 1b
// b+b+a, a+b+b 1a 2b
// b+b+b 0a 3b
// a+a+a+a 4a 0b
// a+a+a+b, b+a+a+a, a+a+b+a, a+b+a+a 3a 1b
// a+a+b+b, a+b+a+b, a+b+b+a, b+a+a+b, b+a+b+a, b+b+a+a 2a 2b
// a+b+b+b, b+a+b+b, b+b+a+b, b+b+b+a 1a 3b
// b+b+b+b 4b
// a+a+a+a+a 5a 0b
// a+a+a+a+b, a+a+a+b+a, a+a+b+a+a, a+b+a+a+a, b+a+a+a+a+a 4a 1b
// a+a+a+b+b, a+a+b+a+b, a+a+b+b+a, a+b+a+a+b, a+b+a+b+a, a+b+b+a+a, b+a+a+a+b, b+a+a+b+a, b+a+b+a+a, b+b+a+a+a 3a 2b
// a+a+b+b+b, a+b+a+b+b 2a 3b
// a+b+b+b+b 1a 4b
// b+b+b+b+b 0a 5b
function processData(n, a, b){
var ans = [];
for(var i = 0; i < n + 1; i++){
aa = a * (n-i);
bb = b * (i);
ans.push(aa + bb)
}
ans.sort(function(a, b){return a - b});
return ans;
}
console.log(processData(3, 1, 2));
&#13;