Gegeben zwei eindeutige Zahlenfolgen: push order of stack
und pop order of stack
, Zahlen in push order
sind in aufsteigender Sortierreihenfolge, nun frage die pop order
ist legal oder nicht?
Zum Beispiel ist push order
1 2 3 4 5, also 4 5 3 2 1 ist eine legale Pop-Reihenfolge, weil wir wie folgt pushen und knallen können:
push 1, push 2, push 3, push 4, pop, push 5, pop, pop, pop, pop
so Pop-Reihenfolge: 4 5 3 2 1 ist legal, und 4 3 5 1 2 ist keine legale Pop-Bestellung.
Da Ihre Push-Sequenz in aufsteigender Reihenfolge ist, wenn Sie eine Zahl N
in Ihrer Pop-Warteschlange sehen, dann
Alle Zahlen, die 1) unterhalb von N
und 2) noch nicht gefüllt sind, müssen in absteigender Reihenfolge ausgegeben werden.
Zum Beispiel ist 4 3 5 1 2 keine gültige Reihenfolge, da, wenn wir "4" sehen, alle Zahlen auftauchen kleiner als '4', aber noch nicht gepoppt, muss in absteigender Reihenfolge gepoppt werden. Wenn Sie jedoch erst "1" und dann "2" drücken, wird diese Eigenschaft verletzt.
Eine Möglichkeit besteht darin, den Stack tatsächlich zu konstruieren:
Für jede Zahl X
in der Pop-Reihenfolge:
X
gedrückt haben. Wenn du alle Zahlen gedrückt hast und X
nicht gefunden hast, gibt es keine Möglichkeit, die Pop-Reihenfolge zu erhalten. X
Beachten Sie, dass dies tatsächlich nicht erfordert, dass die Push-Reihenfolge aufsteigend ist.
Sie können die Reihenfolge ausnutzen, um die oben genannten Punkte leicht zu optimieren (um früher zu versagen), indem Sie fehlschlagen, wenn X
kleiner ist als die oberste des Stapels.
Da Sie jedes Element nur einmal drücken, ist das obige lineare Zeit (die Sie nicht besser können) und linearer Raum.
Beispiel:
%Vor%Annahme: Die Push-Reihenfolge und Pop-Reihenfolge enthält genau die gleichen Zahlen. Wenn dies keine gültige Annahme ist, kann sie unter Verwendung eines Hash-Satzes (oder einer Hash-Map mit Zählungen, falls es Duplikate geben kann) in linearer Zeit validiert werden, obwohl dies die O (1) -Raumkomplexität beeinträchtigen würde.
Idee: Jedes Element in der Pop-Reihenfolge muss entweder kleiner als das Element davor oder mehr als das Maximum sein, sonst ist die Pop-Reihenfolge nicht gültig.
Dies kann in O (n) Zeit und O (1) Abstand überprüft werden, indem nur das Maximum verfolgt wird.
Warum das funktioniert:
Die Push-Reihenfolge ist in aufsteigender Reihenfolge, also unabhängig davon, wann Sie Elemente poppen:
Also gibt es zwei Möglichkeiten:
Beispiele:
4 5 3 2 1
ist gültig seit 5 & gt; max (4), 3 & lt; 5, 2 & lt; 3 und 1 & lt; 2.
4 3 5 1 2
ist nicht gültig seit 2 & gt; 1 aber 2 & lt; max (5).
1 2 3 5 4
ist gültig seit 2 & gt; max (1), 3 & gt; max (2), 5 & gt; max (3) und 4 & lt; 5.
Tags und Links algorithm