Prendiamo la sequenza di numeri interi da a e li spingiamo su uno stack uno per uno in ordine. Tra ogni push, possiamo scegliere di estrarre qualsiasi numero di oggetti dalla pila (da 0 alla dimensione corrente della pila).
Ogni volta che estraiamo un valore dalla pila, lo stamperemo.
Ad esempio, viene stampato quando lo facciamo . viene da .push, pop, push, pop, push, pop
push, push, push, pop, pop, pop
Tuttavia, non è una stampa possibile, poiché non è possibile avere stampati seguiti da , senza vedere in mezzo.
Domanda: Come possiamo rilevare ordini impossibili come ?
In effetti, sulla base della mia osservazione, ho escogitato una potenziale soluzione. Ma il problema è che non posso dimostrare che la mia osservazione è completa.
Il programma che ho scritto con la seguente logica:
Quando il valore corrente meno il valore successivo è maggiore di 1, un valore tra corrente e successivo non può apparire dopo successivo. Ad esempio, se current = 3 e next = 1, il valore tra current (3) e next (1) è 2 che non può apparire dopo next (1), quindi viola la regola.
Questo copre tutti i casi?