Я работаю над вызовом с codefights.com.
Учитывая массив целых чисел (возможно, отрицательный), мне нужно вернуть самую большую сумму, которую я могу достичь, не добавляя два последовательных целого числа (я не могу изменить порядок массива).Самая большая сумма из массива без добавления 2 последовательных значений
Не легко объяснить, так вот несколько примеров:
- вход: [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», которые заставили меня понять, что я смотрел на все это неправильно.
И теперь я застрял, не знаю, как это сделать.
Любые идеи?
редактировать:
Используя ответ Mrgreen, я получил это:
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. Я все еще работаю над исправлением, но я редактирую вопрос, чтобы иметь пуленепробиваемое решение: р
Неясно, почему вы передаете '1' в обоих примерах? – hindmost
, потому что вам нужна самая большая сумма, и вы не можете добавить 2 последовательных значения из массива. Пропуск тех, которые позволяют достичь наибольшей суммы, добавив 2 и 4 (1-й пример). – Spare