Выбор ответа Middle Скользящее окно обновлено
Ошибка в обновлении ответа
Вопрос
Функция ищет длину самого длинного подмассива с суммой не больше limit (числа неотрицательные). В чём ошибка?
function longest(arr, limit) {
let l = 0, sum = 0, best = 0;
for (let r = 0; r < arr.length; r++) {
sum += arr[r];
while (sum > limit) sum -= arr[l++];
best = Math.max(best, r - l + 1);
}
return best;
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибок нет. Расширяем окно, сжимаем, пока сумма больше limit, после сжатия окно [l, r] валидно, и его длина r - l + 1.
Варианты ответа
- Ответ надо обновлять до цикла
while - Нужно
ifвместоwhileпри сжатии - Ошибок нетправильный ответ
- Нужно
r - lвместоr - l + 1
Разбор
Расширяем окно, сжимаем, пока сумма больше limit, после сжатия окно [l, r] валидно, и его длина r - l + 1. Функция корректна.
- Обновление до сжатия засчитало бы невалидное окно.
ifсдвинет левый край только на один элемент, а сумма может остаться большеlimit:whileздесь нужен.- Длина отрезка
[l, r]включительно равнаr - l + 1.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Скользящее окно»
- Самая длинная серия единиц с k заменами
- Перестановка как подстрока
- Самая длинная серия после k замен
- Самая длинная подстрока без повторов
- Максимальная сумма окна длины k
- Максимум гласных в окне
- Кратчайший подмассив с суммой ≥ target
- Самая короткая подстрока с k различными