Я работал над этим алгоритмом в вызове leetcode, и я нашел интересный подход к проблеме. Может кто-нибудь объяснить, почему в качестве первого шага этого решения мы добавляем значение предыдущего элемента к текущему?
Пример ввода: [0,6,5,2,2,5,1,9,4]
, L = 1
, M = 2
.
Массив после суммирования: [0, 6, 11, 13, 15, 20, 21, 30, 34]
Заранее спасибо.
const maxSumTwoNoOverlap = (arr, L, M) => {
let len = arr.length;
for (let i = 1; i < len; i++) {
arr[i] += arr[i - 1];
}
let LMax = arr[L - 1], MMax = arr[M-1];
let res = arr[M + L - 1];
console.log('LMax', LMax);
console.log('MMax', MMax);
for (let i = M + L ; i< len ; i++) {
// update LMax to i - M;
LMax = Math.max(LMax, arr[i - M] - arr[i - M - L]);
MMax = Math.max(MMax, arr[i - L] - arr[i - M - L]);
res = Math.max(res,
LMax + arr[i] - arr[i - M],
MMax + arr[i] - arr[i - L]
)
}
return res;
};