Nous prenons la séquence d'entiers de à , et nous les poussons dans une pile un par un dans l'ordre. Entre chaque poussée, nous pouvons choisir de faire apparaître n'importe quel nombre d'éléments de la pile (de 0 à la taille de pile actuelle).
Chaque fois que nous sortons une valeur de la pile, nous l'imprimons.
Par exemple, est imprimé lorsque nous le faisons . vient .push, pop, push, pop, push, pop
push, push, push, pop, pop, pop
Cependant, n'est pas une impression possible, car il n'est pas possible d'avoir imprimés suivis de , sans voir entre les deux.
Question: Comment pouvons-nous détecter des commandes impossibles comme ?
En fait, sur la base de mon observation, j'ai trouvé une solution potentielle. Mais le problème est que je ne peux pas prouver que mon observation est complète.
Le programme que j'ai écrit avec la logique suivante:
Lorsque la valeur actuelle moins la valeur suivante est supérieure à 1, une valeur entre le courant et le suivant ne peut pas apparaître après le suivant. Par exemple, si current = 3 et next = 1, alors la valeur entre current (3) et next (1) est 2 qui ne peut pas apparaître après next (1), donc viole la règle.
Est-ce que cela couvre tous les cas?