Показать сообщение отдельно
  #16 (permalink)  
Старый 16.08.2020, 22:36
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Похоже, задача на динамическое программирование.
Алгоритм примерно такой:
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, плюс мемоизация, так что должно по идее за линейное время, если не ошибаюсь. Предполагается, что отрицательных чисел нет. Здесь вычисляется только сумма, а если надо индексы чисел, то придется допиливать.

Последний раз редактировалось Alexandroppolus, 16.08.2020 в 22:38.
Ответить с цитированием