Menu
CoddyTech

Next Permutation

On te donne un tableau d’entiers nums, et certaines valeurs peuvent se répéter. Imagine tous les arrangements distincts de ces valeurs, triés dans l’ordre lexicographique : compare deux arrangements au premier indice où ils diffèrent, et celui qui a la plus petite valeur à cet indice vient en premier. Renvoie l’arrangement qui vient juste après nums dans cet ordre.

Si nums est déjà le plus grand arrangement, il n’y en a pas après : renvoie le plus petit, c’est-à-dire les valeurs triées par ordre croissant. Vise un temps d’exécution en O(n) et une mémoire supplémentaire en O(1).

Fonction

nextPermutation(nums: integer-array) → integer-array
numsinteger-array
l’agencement actuel des valeurs
Renvoieinteger-array
l’arrangement suivant dans l’ordre lexicographique, ou les valeurs triées par ordre croissant si nums est le plus grand

Contraintes

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

Exemples

Entrée
nums = [2, 5, 4, 1]
Sortie
[4, 1, 2, 5]
Explication
La queue 5, 4, 1 est décroissante, donc le 2 qui la précède doit augmenter. La plus petite valeur de la queue supérieure à 2 est 4 ; place-le là et mets le reste dans l’ordre croissant : [4, 1, 2, 5].
challenge icon

Pour aller plus loin

Comment trouver plutôt l’arrangement précédent, celui qui vient juste avant nums dans l’ordre lexicographique ?

Réinitialiser le code
def nextPermutation(nums):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Argument

nums = [2, 5, 4, 1]

Résultat attendu

[4, 1, 2, 5]