Похоже, задача на динамическое программирование.
Алгоритм примерно такой:
function maxSum(arr) {
var memo = [0, 0];
function maxSumR(len) {
if (len < 2) {
return len ? arr[0] : 0;
} else {
if (memo[len]) {
return memo[len];
} else {
return memo[len] = Math.max(maxSumR(len - 1), arr[len - 1] + maxSumR(len - 2));
}
}
}
return maxSumR(arr.length);
}
alert(maxSum([4, 10, 3, 1, 5]));
Компа под рукой нет, не дебажил. Но в целом всё стандартно - сведение задачи n элементов к задаче для n-1 или n-2, плюс мемоизация, так что должно по идее за линейное время, если не ошибаюсь. Предполагается, что отрицательных чисел нет. Здесь вычисляется только сумма, а если надо индексы чисел, то придется допиливать.