Vous devez écrire un programme ou une fonction qui reçoit une liste d'entiers distincts en entrée et en sortie ou renvoie le nombre d'occurrences des nombres en entrée dans la pyramide numérique inversée suivante.
En partant de la liste d'origine à chaque étape, nous en créons une nouvelle avec les valeurs maximales de chaque paire de nombres adjacents (par exemple, 5 1 2 6
devient 5 2 6
). Nous nous arrêtons lorsqu'il n'y a qu'un seul numéro dans la liste.
La pyramide complète pour 5 1 2 6
est
5 1 2 6
5 2 6
5 6
6
Le nombre d'occurrences résultant est 3 1 2 4
(pour 5 1 2 6
respectivement).
Contribution
- Une liste d'un ou plusieurs entiers sans répétition. (par exemple,
1 5 1 6
n'est pas valide.)
Production
- Une liste d'entiers positifs. Le
i
e élément de la liste est le nombre d'occurrences dui
e numéro d'entrée dans la pyramide.
Exemples
Entrée => Sortie
-5 => 1
8 4 => 2 1
5 9 7 => 1 4 1
1 2 3 9 8 6 7 => 1 2 3 16 3 1 2
6 4 2 1 3 5 => 6 4 2 1 3 5
5 2 9 1 6 0 => 2 1 12 1 4 1
120 5 -60 9 12 1 3 0 1200 => 8 2 1 3 16 1 4 1 9
68 61 92 58 19 84 75 71 46 69 25 56 78 10 89 => 2 1 39 2 1 27 6 5 1 6 1 2 14 1 12
Il s'agit de code-golf, donc l'entrée la plus courte l'emporte.
Puzzle bonus: pouvez-vous résoudre le problème à O(n*log n)
temps?