Ctrl K

Перестроить середину шеренги

Средняя
Ученики стоят в шеренгу, их рост записан в массиве heights. Учитель хочет, чтобы рост не убывал слева направо, но готов переставлять людей только внутри **одного непрерывного участка** шеренги: участок сортируется по возрастанию, остальные стоят на месте. Верните длину самого короткого такого участка, после сортировки которого вся шеренга упорядочена. Если шеренга уже в порядке, верните 0. Сортировка за O(n log n) очевидна — попробуйте уложиться в O(n).
Пример 1
heights=[150, 158, 155, 162, 170, 165, 180] → 5

Достаточно переставить ребят на местах 1–5: [158, 155, 162, 170, 165] → [155, 158, 162, 165, 170]. Длина 5.

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

Шеренга уже упорядочена, переставлять никого не нужно.

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

Придётся упорядочить обоих.

Ограничения
  • 1 ≤ len(heights) ≤ 10⁴
  • -10⁵ ≤ heights[i] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиБольше всего кусков для сортировки СредняяУступающие герои СредняяНаибольшее число из двух рядов СложнаяПартии для сортировки с повторами СложнаяСтудии для записи Средняя
загружаем Python…
Вход
heights=[150, 158, 155, 162, 170, 165, 180]
Ожидается
5

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