Titel
Verwenden Sie nur zwei Stapel, um eine First-In-First-Out-Warteschlange zu implementieren. Die Warteschlange sollte alle von der allgemeinen Warteschlange unterstützten Vorgänge unterstützen (Push, Pop, Peek, Leer):
Implementieren Sie die MyQueue-Klasse:
void push (int x) Schieben Sie das Element x an das Ende der Warteschlange.
int pop () Entfernen Sie es vom Anfang der Warteschlange und geben Sie das Element zurück.
int peek () Geben Sie das Element am Anfang der Warteschlange zurück.
boolean empty () Wenn die Warteschlange ist leer, return true, andernfalls false
Beschreibung:
Sie können nur Standard-Stack-Operationen verwenden. Das heißt, nur Push-to-Top, Peek / Pop von oben, Größe und leere Operationen sind zulässig.
Die von Ihnen verwendete Sprache unterstützt möglicherweise keine Stapel. Sie können list oder deque (Warteschlange mit zwei Enden) verwenden, um einen Stapel zu simulieren, sofern es sich um eine Standardstapeloperation handelt.
Fortgeschrittene:
Können Sie für jede Operation eine Warteschlange mit einer amortisierten O (1) -Zeit implementieren? Mit anderen Worten, die Gesamtzeitkomplexität der Ausführung von n Operationen beträgt O (n), selbst wenn eine der Operationen lange dauern kann.
Beispiel:
Eingabe:
["MyQueue", "Push", "Push", "Peek", "Pop", "Leer"]
[[], [1], [2], [], [], []]
Ausgabe:
[null, null, null, 1, 1, false]
解释 :
MyQueue myQueue = new MyQueue ();
myQueue.push (1); // Warteschlange ist: [1]
myQueue.push (2); // Warteschlange ist: [1, 2] (ganz links vor der Warteschlange)
myQueue.peek (); // return 1
myQueue.pop (); // 1 zurückgeben, Warteschlange ist [2]
myQueue.empty (); // falsch zurückgeben
prompt:
1 <= x <= 9
Rufen Sie Push, Pop, Peek und Leer bis zu 100 Mal auf,
vorausgesetzt, alle Vorgänge sind gültig (eine leere Warteschlange ruft beispielsweise keine Pop- oder Peek-Vorgänge auf).
Verwandte Themen Stack Design
Ideen zur Problemlösung
Diese Frage ist relativ einfach. Sie müssen nur verstehen, dass der Stack einen First-In-Last-Out-Charakter hat und das Team einen First-In-First-Out-Charakter hat.
Code-Demo
class MyQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;
/** Initialize your data structure here. */
public MyQueue() {
stack1=new Stack<>();
stack2=new Stack<>();
}
/** Push element x to the back of queue. */
public void push(int x) {
if(!stack2.empty()) {
while (!stack2.empty())
{
Integer pop = stack2.pop();
stack1.push(pop);
}
stack1.push(x);
}
else
stack1.push(x);
}
/** Removes the element from in front of queue and returns that element. */
public int pop() {
if(!stack1.empty())
{
while (!stack1.empty())
{
Integer pop = stack1.pop();
stack2.push(pop);
}
Integer res = stack2.pop();
return res;
}
else
return stack2.pop();
}
/** Get the front element. */
public int peek() {
if(!stack1.empty())
{
while (!stack1.empty())
{
Integer pop = stack1.pop();
stack2.push(pop);
}
return stack2.peek();
}
else
return stack2.peek();
}
/** Returns whether the queue is empty. */
public boolean empty() {
if(!stack1.empty())
{
return stack1.empty();
}
else
return stack2.empty();
}
}
Effektdemonstration
Die Info-
Antwort war erfolgreich:
Ausführungszeit: 0 ms, 100,00% der Java-Benutzer besiegt
Speicherverbrauch: 36,6 MB, 12,28% der Java-Benutzer besiegt