Menu
CoddyTech

Next Permutation

Дан массив целых чисел nums; значения могут повторяться. Представь все различные перестановки этих значений, отсортированные в лексикографическом порядке: сравнивай две перестановки по первому индексу, на котором они различаются, и первой идёт та, у которой значение в этой позиции меньше. Верни перестановку, следующую за nums в этом порядке.

Если nums уже является наибольшей перестановкой, следующей за ней нет: верни наименьшую, в которой значения отсортированы по возрастанию. Стремись к временной сложности O(n) и дополнительной памяти O(1).

Функция

nextPermutation(nums: integer-array) → integer-array
numsinteger-array
текущее расположение значений
Возвращаетinteger-array
следующее расположение в словарном порядке или значения, отсортированные по возрастанию, если nums — наибольший

Ограничения

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 1000

Примеры

Ввод
nums = [2, 5, 4, 1]
Вывод
[4, 1, 2, 5]
Пояснение
Хвост 5, 4, 1 убывает, поэтому число 2 перед ним должно увеличиться. Наименьшее значение в хвосте, превышающее 2, — это 4; поставь его на это место, а остальные расположи в возрастающем порядке: [4, 1, 2, 5].
challenge icon

Дополнительный вопрос

Как вместо этого найти предыдущую перестановку — ту, которая идет непосредственно перед nums в словарном порядке?

Сбросить код
def nextPermutation(nums):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

nums = [2, 5, 4, 1]

Ожидаемый вывод

[4, 1, 2, 5]