Ctrl K

Шаг назад одним обменом

Средняя
Дан массив положительных целых чисел values (значения могут повторяться). Разрешено поменять местами ровно два элемента — один раз. Среди всех массивов, которые получаются таким обменом и **лексикографически меньше** исходного, найдите самый большой и верните его. Иначе говоря, нужен ближайший «снизу» вариант, до которого можно дойти одним обменом. Если ни один обмен не делает массив меньше, верните values без изменений.
Пример 1
values=[2, 7, 5, 8] → [2, 5, 7, 8]

Меняем 7 и 5: получаем [2, 5, 7, 8]. Это единственный обмен, после которого массив становится меньше исходного.

Пример 2
values=[6, 3, 4, 4] → [4, 3, 6, 4]

Уменьшить можно только первый элемент. Самое большое число меньше 6 правее него — 4; берём первую из двух четвёрок, иначе результат получится меньше: [4, 3, 6, 4].

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

Массив уже неубывающий: любой обмен сделает его только больше, поэтому возвращаем его без изменений.

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

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