introduction
Supposons que vous vouliez calculer les maxima de queue d'une liste de nombres, c'est-à-dire le maximum de chaque suffixe non vide. Une façon de le faire est de choisir à plusieurs reprises un numéro et de le remplacer par un nombre plus élevé se produisant après, jusqu'à ce que ce ne soit plus possible. Dans ce défi, votre tâche consiste à effectuer une étape de cet algorithme.
La tâche
Votre entrée est une liste d'entiers L , qui peut être vide. Votre sortie sera la liste L où exactement un nombre L i a été remplacé par un autre L j , où L i <L j et i <j .
En d'autres termes, vous devez remplacer un nombre par un nombre plus élevé qui se produit après.
Vous pouvez choisir i et j librement parmi toutes les paires valides, et le choix peut être non déterministe.
Si ces i et j n'existent pas (c'est-à-dire que L est non croissant), votre sortie doit être L inchangée.
Exemple
Considérez l'entrée L = [3, 1, 4, -1, 2] . Les opérations possibles sont de remplacer 3 par 4 , de remplacer 1 par 4 , de remplacer 1 par 2 ou de remplacer -1 par 2 . Ainsi, les sorties possibles sont:
[ 3 , 1 , 4 , -1 , 2 ]
------------------------------
[( 4), 1 ,( 4), -1 , 2 ]
[ 3 ,( 4),( 4), -1 , 2 ]
[ 3 ,( 2), 4 , -1 ,( 2)]
[ 3 , 1 , 4 ,( 2),( 2)]
Si vous répétez les temps assez d'opération, le résultat final sera [4,4,4,2,2] , ce qui est précisément la liste des maxima de queue de L .
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Dans ce dernier cas, vous pouvez modifier l'entrée en place au lieu de renvoyer un nouveau tableau, si votre langue le permet. Les formats d'entrée et de sortie sont flexibles dans des limites raisonnables.
Le nombre d'octets le plus bas gagne.
Cas de test
Toutes les sorties possibles sont affichées.
[] -> []
[1] -> [1]
[1,2] -> [2,2]
[2,1] -> [2,1]
[4,4,4,4] -> [4,4,4,4]
[-1,-3,-10] -> [-1,-3,-10]
[1,3,10] -> [3,3,10] [10,3,10] [1,10,10]
[1,1,2,1] -> [2,1,2,1] [1,2,2,1]
[998,64,2,-94,-789] -> [998,64,2,-94,-789]
[998,2,64,-94,-789] -> [998,64,64,-94,-789]
[3,1,4,-1,2] -> [4,1,4,-1,2] [3,4,4,-1,2] [3,2,4,-1,2] [3,1,4,2,2]
[-1,4,0,4,7,2,3] -> [4,4,0,4,7,2,3] [0,4,0,4,7,2,3] [-1,4,4,4,7,2,3] [7,4,0,4,7,2,3] [-1,7,0,4,7,2,3] [-1,4,7,4,7,2,3] [-1,4,0,7,7,2,3] [2,4,0,4,7,2,3] [-1,4,2,4,7,2,3] [3,4,0,4,7,2,3] [-1,4,3,4,7,2,3] [-1,4,0,4,7,3,3]
[3542,-12311,7662,1672,6081] -> [7662,-12311,7662,1672,6081] [3542,7662,7662,1672,6081] [3542,1672,7662,1672,6081] [6081,-12311,7662,1672,6081] [3542,6081,7662,1672,6081] [3542,-12311,7662,6081,6081]
x=>x.map(c=>c<x[++i]&!d?x[d=i]:c,d=i=0)
?