Answer
t.me/js_testОтвет:
const getMaxSabSum = (arr) => {
let maxSum = 0;
let partialSum = 0;
for (let item of arr) {
partialSum += item;
maxSum = Math.max(maxSum, partialSum);
if (partialSum < 0) partialSum = 0;
}
return maxSum;
};
Обьяснение:
Идём по массиву и накапливаем текущую частичную сумму элементов в переменной s. Если s в какой-то момент становится отрицательной – присваиваем s=0. Максимальный из всех s и будет ответом.
Код для проверки:
const getMaxSabSum = (arr) => {
let maxSum = 0;
let partialSum = 0;
for (let item of arr) {
partialSum += item;
maxSum = Math.max(maxSum, partialSum);
if (partialSum < 0) partialSum = 0;
}
return maxSum;
};
console.log(getMaxSabSum([-2, -1, 1, 2])); // 1 + 2 = 3
console.log(getMaxSabSum([2, -1, 2, 3, -9])); // 2 + (-1) + 2 + 3 = 6
console.log(getMaxSabSum([-1, -2, -3])); // 0