Ctrl K

Следующая расстановка по порядку

Средняя
Выпишем все различные расстановки элементов массива и упорядочим их лексикографически — как слова в словаре: сравниваем первые элементы, при равенстве — вторые и так далее. Например, для [1, 2, 3] порядок такой: [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]. Дан массив values. Верните следующую по этому порядку расстановку. Если values — последняя расстановка, верните первую, то есть элементы по возрастанию. Сможете обойтись константной дополнительной памятью, переставляя элементы прямо в values?
Пример 1
values=[2, 4, 3, 1] → [3, 1, 2, 4]

Хвост 4, 3, 1 убывает. Двойку меняем на наименьшее большее из хвоста — 3, остаток 1, 2, 4 ставим по возрастанию: [3, 1, 2, 4].

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

Это последняя расстановка по порядку, поэтому массив становится первой: [2, 5, 5].

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

Расстановки по порядку: [1, 3, 3], [3, 1, 3], [3, 3, 1]. Следующая — [3, 1, 3].

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

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