Ctrl K

Ночи, когда вянут ростки

Средняя
В ряд высажены ростки, их высоты записаны слева направо в массиве heights. Каждую ночь засыхает каждый росток, который **строго ниже** своего соседа слева (ближайшего оставшегося в ряду). Все такие ростки засыхают одновременно, а утром ряд смыкается: засохшие убирают, и у оставшихся появляются новые соседи. Сколько ночей пройдёт, пока ряд не перестанет меняться, то есть пока высоты слева направо не станут неубывающими? Если ряд уже такой, ответ 0. Прямая симуляция по ночам может работать за O(n²) — попробуйте уложиться в O(n).
Пример 1
heights=[6, 2, 4, 1, 7] → 2

В первую ночь засыхают 2 (слева 6) и 1 (слева 4), остаётся [6, 4, 7]. Во вторую ночь засыхает 4 (слева 6), остаётся [6, 7] — дальше ряд не меняется. Ответ 2.

Пример 2
heights=[1, 3, 3, 8] → 0

Ни один росток не ниже левого соседа, ряд уже устоялся.

Пример 3
heights=[9, 1, 2, 3] → 3

Каждую ночь засыхает ровно один росток: сначала 1, потом 2, потом 3 — каждый раз новый сосед девятки оказывается ниже неё.

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

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