我正在处理来自 codefights.com 的挑战。
给定一个整数数组(可能是负数),我需要返回在不添加两个连续整数的情况下可以达到的最大总和(我无法更改数组的顺序)。
不容易解释,这里举几个例子:
- 输入:[1, 2, 3, 4]:你会通过 '1',拿 2,不能拿 3,拿 4,你会得到 6。
- 输入:[1, 3, 1]:传递'1',取3,你不能取1,所以你有3。
我虽然我有这个代码:
function solve(vals) {
var even=0; var odd=0;
for(var i=0; i<vals.length; i++){
if(i%2==0){
even+=vals[i];
} else {
odd+=vals[i];
}
}
return Math.max(even, odd);
}
但后来我得到了这个测试用例:[1,0,0,3] 它应该返回 4,跳过了两个“0”,这让我意识到我一直在看错。
现在我被卡住了,真的不知道该怎么做。
有任何想法吗 ?
编辑:
使用格林先生的回答,我得到了这个:
function target_game(a) {
var dp=[], l=a.length-1;
dp[0]=a[0];
dp[1]=Math.max(a[0],a[1]);
for(var i=2; i<=a.length-1; i++){
dp[i]=Math.max(dp[i - 1], dp[i - 2] + a[i]);
}
return dp[l];
}
除非数组包含负值,否则效果很好。
此输入:[-1,0,1,-1] 返回 0。我仍在努力修复,但我正在编辑问题以获得防弹解决方案:p