Descripción del Título
Utilice solo dos pilas para implementar una cola de primero en entrar, primero en salir. La cola debe admitir todas las operaciones admitidas por la cola general (push, pop, peek, empty):
Implemente la clase MyQueue:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
Descripción:
Solo puede usar operaciones de pila estándar, es decir, solo las operaciones de empujar hacia arriba, mirar / sacar desde arriba, el tamaño y las operaciones vacías son legales.
Es posible que el idioma que está utilizando no admita pilas. Puede usar list o deque (cola de dos extremos) para simular una pila, siempre que sea una operación de pila estándar.
Avanzado:
¿Puede implementar una cola con O (1) tiempo amortizado para cada operación? En otras palabras, la complejidad de tiempo total de realizar n operaciones es O (n), incluso si una de las operaciones puede llevar mucho tiempo.
Ejemplo:
ingresar:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
Producción:
[null, null, null, 1, 1, false]
Explicación:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false
inmediato:
1 <= x <= 9
Llamar push, pop, peek y vaciar hasta 100 veces,
asumiendo que todas las operaciones son válidas (por ejemplo, una cola vacía no llamará operaciones pop o peek)
Ideas para resolver problemas
Prepare la temperatura y las primeras pilas. Cuando
apunte a la operación de empuje, empuje el elemento a la primera pila
Después de realizar las siguientes operaciones, las dos pilas se muestran en la siguiente figura
MyQueue myQueue = new MyQueue();
myQueue.push(11)
myQueue.push(22)
myQueue.push(33)
Después de realizar las siguientes operaciones, las dos pilas se muestran en la siguiente figura
myQueue.peek ()
Todos los elementos ingresan a la pila temporal
y restauran el elemento original después de obtener el primer elemento del equipo.
Después de realizar las siguientes operaciones, las dos pilas se muestran en la siguiente figura
myQueue.pop();
Primero mueva todos los elementos a la pila temporal y saque
el elemento superior de la pila temporal, es decir, el primer elemento del equipo.
Regrese el elemento a la temperatura después de hacer estallar el elemento líder
Código
class MyQueue {
private Stack<Integer> temp;
private Stack<Integer> first;
/** Initialize your data structure here. */
public MyQueue() {
temp=new Stack<Integer>();
first=new Stack<Integer>();
}
/** Push element x to the back of queue. */
public void push(int x) {
first.push(x);
}
/** Removes the element from in front of queue and returns that element. */
public int pop() {
while (!first.empty()){
temp.push(first.pop());
}
int result=temp.pop();
while (!temp.empty()){
first.push(temp.pop());
}
return result;
}
/** Get the front element. */
public int peek() {
while (!first.empty()){
temp.push(first.pop());
}
int result=temp.pop();
temp.push(result);while (!temp.empty()){
first.push(temp.pop());
}
return result;
}
/** Returns whether the queue is empty. */
public boolean empty() {
return first.isEmpty();
}
}