Ctrl K

Низкий слева, высокий справа

Средняя
Ученики стоят в шеренге, их рост записан в массив heights. За один шаг можно поменять местами двух **соседних** учеников. Фотограф хочет, чтобы самый низкий ученик стоял первым слева, а самый высокий — последним справа. Если самых низких или самых высоких несколько, на краю достаточно оказаться любому из них. Порядок остальных учеников не важен. Верните наименьшее число обменов, которое для этого нужно.
Пример 1
heights=[4, 7, 2, 7, 5] → 3

Двойку двигаем в начало за 2 обмена: [2, 4, 7, 7, 5]. Последнюю семёрку — в конец за 1 обмен: [2, 4, 7, 5, 7]. Итого 3.

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

Один обмен соседей даёт [1, 3]: минимум слева, максимум справа.

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

Все значения равны, так что любое из них — и наименьшее, и наибольшее. Обмены не нужны.

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

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