你在将长度为6的数组作为参数传递给n=3。我改变了你的算法,使用
length
代替了它:
你正在将长度为6的数组作为参数传递给n=3。我已经更改了你的算法,使用length
代替了它:
function SubSequence(a){
var now = 0,prev =0;
for(var i = 0;i < a.length;i++){
prev = Math.max(0,prev + a[i]);
now = Math.max(prev,now);
}
return now;
}
console.log(SubSequence([-1,-2,-3,4,6,7]));
并且它给出了 17。
它是否也适用于所有正整数数组?
是的,那么它将给出数组中所有元素的总和。
如果你想要长度为 3 的最大子序列,请使用
function SubSequence(a,n){
var now = 0;
for(var i = 0; i < n; i++) {
now += a[i];
}
var best = now;
for(var i = n;i < a.length;i++) {
now += a[i] - a[i-n];
best = Math.max(now,best);
}
return best;
}
console.log(SubSequence([-1,-2,-3,4,6,7,1,4],3));
最好的是4+6+7,不允许使用4+6+7+1+4。