Menu
CoddyTech

Next Permutation

整数の配列 nums が与えられます。値は重複する場合があります。これらの値の異なる並べ替えをすべて辞書順に並べたものを考えてください。2つの並べ替えを比較するときは、値が異なる最初のインデックスを比べ、その位置の値が小さい方を先にします。この順序で 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]