spécification
Ce défi est simple à énoncer: votre entrée est un tableau non vide d'entiers non négatifs, et votre tâche consiste à le partitionner en aussi peu de sous-séquences croissantes que possible. Plus formellement, si le tableau d'entrée est A
, alors la sortie est un tableau de tableaux B
tel que:
- Chaque tableau
B
forme une partition deA
sous-séquences disjointes (pas nécessairement contiguës). Inductivement, cela signifie que soitB
le tableau singleton contientA
, soit le premier élément deB
est une sous-séquence deA
et le reste forme une partition deA
cette sous-séquence supprimée. - Chaque tableau en
B
augmente (pas nécessairement strictement). - Le nombre de tableaux dans
B
est minimal.
L'entrée et la sortie peuvent être prises dans le format de tableau natif de votre langue. Notez qu'il peut y avoir plusieurs sorties correctes.
Exemple
Considérez le tableau d'entrée A = [1,2,1,2,5,4,7,1]
. Une sortie possible est B = [[1],[1,2,4,7],[1,2,5]]
. La condition de partition est évidente à partir de ce diagramme:
A 1 2 1 2 5 4 7 1
B[0] 1
B[1] 1 2 4 7
B[2] 1 2 5
De plus, chaque tableau en B
augmente. Enfin, A
ne peut pas être divisé en deux sous-séquences croissantes, donc la longueur de B
est également minimale. C'est donc une sortie valide.
Règles et notation
Vous pouvez écrire une fonction ou un programme complet. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites. Il n'y a pas de limite de temps, mais vous devez évaluer votre solution sur tous les cas de test avant de la soumettre.
Cas de test
Une seule sortie possible est affichée, mais il peut y avoir plusieurs options valides. En particulier, l'ordre des tableaux dans le résultat n'a pas d'importance (mais chaque tableau individuel doit être en ordre croissant).
[0] -> [[0]]
[3,5,8] -> [[3,5,8]]
[2,2,2,2] -> [[2,2,2,2]]
[1154,1012,976,845] -> [[845],[976],[1012],[1154]]
[6,32,1,2,34,8] -> [[1,2,8],[6,32,34]]
[1,12,1,12,1,13] -> [[1,1,1,13],[12,12]]
[6,4,6,13,18,0,3] -> [[0,3],[4,6,13,18],[6]]
[1,2,3,2,3,4,7,1] -> [[1,1],[2,2,3,4,7],[3]]
[0,9,2,7,4,5,6,3,8] -> [[0,2,3,8],[4,5,6],[7],[9]]
[7,1,17,15,17,2,15,1,6] -> [[1,1,6],[2,15],[7,15,17],[17]]
[4,12,2,10,15,2,2,19,16,12] -> [[2,2,2,12],[4,10,15,16],[12,19]]
[10,13,9,2,11,1,10,17,19,1] -> [[1,1],[2,10,17,19],[9,11],[10,13]]
[3,7,3,8,14,16,19,15,16,2] -> [[2],[3,3,8,14,15,16],[7,16,19]]
[15,5,13,13,15,9,4,2,2,17] -> [[2,2,17],[4],[5,9],[13,13,15],[15]]
B
, j'espère qu'elles sont plus claires maintenant.
[0,5,2,0] -> [[0,5],[0,2]]
(c'est-à-dire recycler le premier zéro au lieu d'utiliser chacune d'elles une fois). Est-ce intentionnel?