Вопрос проверяет понимание управления границами окна в алгоритме скользящего окна, что важно для оптимизации задач с подмассивами или подстроками.
Алгоритм скользящего окна использует два указателя (левый и правый) для работы с непрерывной частью данных. Правый указатель отвечает за расширение окна — он добавляет новые элементы, двигаясь вперёд. Левый указатель сужает окно, удаляя элементы, когда текущее окно перестаёт удовлетворять условию задачи.
function maxSumSubarray(arr, k) {
let left = 0, sum = 0, maxSum = 0;
for (let right = 0; right < arr.length; right++) {
sum += arr[right]; // правый расширяет окно
if (right >= k - 1) {
maxSum = Math.max(maxSum, sum);
sum -= arr[left]; // левый сужает окно
left++;
}
}
return maxSum;
}В этом примере правый указатель добавляет каждый элемент, а левый удаляет элемент, когда окно достигает размера k.
Правый указатель всегда движется вперёд, расширяя окно, а левый — только по условию, сужая окно. Это позволяет эффективно решать задачи с подмассивами за O(n) времени.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию