Как, почему этот код возвращает именно сумму элементов подмассива, а не сумму всех элементов или нуль?Я так понимаю, что в partialSum добавляются все элементы массива
function getMaxSubSum(arr) {
let maxSum = 0;
let partialSum = 0;
for (let item of arr) { // for each item of arr
partialSum += item; // add it to partialSum
maxSum = Math.max(maxSum, partialSum); // remember the maximum
if (partialSum < 0) partialSum = 0; // zero if negative
}
return maxSum;
}
alert( getMaxSubSum([-1, 2, 3, -9]) ); // 5
alert( getMaxSubSum([-1, 2, 3, -9, 11]) ); // 11
alert( getMaxSubSum([-2, -1, 1, 2]) ); // 3
alert( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100
alert( getMaxSubSum([1, 2, 3]) ); // 6
alert( getMaxSubSum([-1, -2, -3]) ); // 0
А этот пример это вообще бред... Зачем этот цикл с j внутри i?Что-бы не присвоить sumFixedStart значение 0 при новой итерации? Почему тогда нельзя было просто за пределами цикла присвоить этой переменной 0?
function getMaxSubSum(arr) {
let maxSum = 0; // if we take no elements, zero will be returned
for (let i = 0; i < arr.length; i++) {
let sumFixedStart = 0;
for (let j = i; j < arr.length; j++) {
sumFixedStart += arr[j];
maxSum = Math.max(maxSum, sumFixedStart);
}
}
return maxSum;
}
alert( getMaxSubSum([-1, 2, 3, -9]) ); // 5
alert( getMaxSubSum([-1, 2, 3, -9, 11]) ); // 11
alert( getMaxSubSum([-2, -1, 1, 2]) ); // 3
alert( getMaxSubSum([1, 2, 3]) ); // 6
alert( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100
Чтобы чётко понимать что происходит, лучше всего воспользоваться дебаггером.
Если пока не умеете, можете просто залогировать процесс вычислений:
const pre = document.querySelector('pre');
function getMaxSubSum(arr) {
let maxSum = 0; // if we take no elements, zero will be returned
for (let i = 0; i < arr.length; i++) {
let sumFixedStart = 0;
pre.textContent += `Try partial sums starting from index ${i} (${arr[i]})\n`;
for (let j = i; j < arr.length; j++) {
sumFixedStart += arr[j];
pre.textContent += `\tMath.max(${maxSum}, ${arr.slice(i, j+1).join('+')}=${sumFixedStart}) = ${Math.max(maxSum, sumFixedStart)}\n`;
maxSum = Math.max(maxSum, sumFixedStart);
}
}
return maxSum;
}
;[
[-1, 2, 3, -9],
[-1, 2, 3, -9, 11],
[-2, -1, 1, 2],
[1, 2, 3],
[100, -9, 2, -3, 5],
].forEach(testCase => {
pre.textContent += `Solve case: ${JSON.stringify(testCase)}\n`;
let res = getMaxSubSum(testCase);
pre.textContent += `Result is ${res}\n--\n`;
});
<pre></pre>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
При открытии баллона на iPhone 5S/SE содержимое, которое должно отображаться в нижней части карты уплываем ниже контейнера карты и как следствие...
Пишу клиента, используя ReactJS, для http запросов использую axios, делаю пост запрос к серверу, на сервере запрос обрабатывается и возвращает данные...
Поставил на сайт шрифт fontawesome поставил иконки в названиях категорий но возник вопрос: в браузерной строке он не отображается как надо - вместо...