Ctrl K

Лучший минимум для каждой ширины

Средняя
Дан массив heights длины n. Для каждой ширины w от 1 до n рассмотрите все отрезки массива (подряд идущие элементы) длины w, у каждого возьмите минимум и из этих минимумов выберите наибольший. Верните массив длины n, где на позиции w - 1 стоит ответ для ширины w. Прямой перебор работает за O(n²) — попробуйте уложиться в O(n).
Пример 1
heights=[3, 1, 4, 2] → [4, 2, 1, 1]

Ширина 1: лучший минимум 4. Ширина 2: окна [3,1], [1,4], [4,2] дают 1, 1, 2 — лучший 2. Ширина 3 и 4: в любое окно попадает 1.

Пример 2
heights=[5, 6, 6, 5] → [6, 6, 5, 5]

Окно [6, 6] даёт минимум 6 при ширине 2, а при ширине 3 любое окно уже содержит 5.

Ограничения
  • 1 ≤ n ≤ 10⁵
  • 0 ≤ heights[i] ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПрямой обход дерева поиска СредняяНиз, пик и середина СредняяСледующее большее по кругу СредняяПерестроить середину шеренги СредняяДерево из вершин-максимумов Средняя
загружаем Python…
Вход
heights=[3, 1, 4, 2]
Ожидается
[4, 2, 1, 1]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 142 теста на сервере, включая скрытые.