MyQueue: usa la pila para implementar la cola

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) Empuja el elemento x hasta el final de la cola
int pop () Elimina del principio de la cola y devuelve el elemento
int peek () Devuelve el elemento al principio de la cola
booleano vacío () Si la cola está vacío, devuelve verdadero; de lo contrario, devuelve falso

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:

Entrada:
[“MyQueue”, “push”, “push”, “peek”, “pop”, “empty”]
[[], [1], [2], [], [], []]
Salida:
[nulo, nulo, nulo, 1, 1, falso]

解释 :
MyQueue myQueue = new MyQueue ();
myQueue.push (1); // la cola es: [1]
myQueue.push (2); // la cola es: [1, 2] (el más a la izquierda está al frente de la cola)
myQueue.peek (); // devuelve 1
myQueue.pop (); // devuelve 1, la cola es [2]
myQueue.empty (); // falso retorno

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)

Temas relacionados Diseño de pila

Ideas para resolver problemas

Esta pregunta es relativamente simple: solo necesita comprender que la pila tiene una naturaleza de primero en entrar, último en salir, y que el equipo tiene una naturaleza de primero en entrar, primero en salir.
Inserte la descripción de la imagen aquí

Demostración de código

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();
    }
}

Demostración de efectos

La
respuesta de información fue exitosa:
tiempo de ejecución: 0 ms, derrotando al 100,00% de los usuarios de Java
Consumo de memoria: 36,6 MB, derrotando al 12,28% de los usuarios de Java

Supongo que te gusta

Origin blog.csdn.net/tangshuai96/article/details/114384039
Recomendado
Clasificación