Выбор ответа Middle Скользящее окно спрашивают часто обновлено
Почему вложенный while не даёт O(n²)
Вопрос
В окне переменной длины есть for по r и вложенный while по l. Почему сложность O(n), а не O(n²)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: l только растёт и за всё время сдвигается не больше n раз. Каждый указатель монотонно двигается вправо и проходит не больше n позиций.
Варианты ответа
lтолько растёт и за всё время сдвигается не больше n разправильный ответwhileвыполняется максимум один раз на каждой итерацииr- JS оптимизирует вложенные циклы и сворачивает их в один
- Сложность на самом деле O(n²), O(n) это средний случай
Разбор
Каждый указатель монотонно двигается вправо и проходит не больше n позиций. Суммарно 2n шагов: O(n). Это амортизированный анализ.
whileможет выполниться много раз на одном шагеr, но суммарно ограничен.- Движок не меняет асимптотику.
- O(n²) было бы, если бы
lсбрасывался назад.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Скользящее окно»
- Самая длинная серия единиц с k заменами
- Перестановка как подстрока
- Самая длинная серия после k замен
- Самая длинная подстрока без повторов
- Максимальная сумма окна длины k
- Максимум гласных в окне
- Кратчайший подмассив с суммой ≥ target
- Самая короткая подстрока с k различными