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

Пожалуй, тут без рекурсии можно, тогда не понадобится расходовать память на мемоизацию. Всё просто, в общем. Вот вариант, где по сути делается то же самое.

function maxSum(a) {
  if (!a || !a.length) {
    return 0;
  }
  var x = 0, y = a[0];
  for (var i = 1; i < a.length; ++i) {
    var t = y;
    y = Math.max(x + a[i], y);
    x = t;
  }
  return y;
}

alert(maxSum([3, 20, 8]));
alert(maxSum([4, 10, 3, 1, 5]));
Ответить с цитированием