MyQueue-Use a pilha para implementar a fila

Título

Use apenas duas pilhas para implementar uma fila primeiro a entrar, primeiro a sair. A fila deve suportar todas as operações suportadas pela fila geral (push, pop, peek, empty):

Implemente a classe MyQueue:

void push (int x) Empurra o elemento x para o final da fila
int pop () Remove do início da fila e retorna o elemento
int peek () Retorna o elemento no início da fila
booleano vazio () Se a fila está vazio, retorna verdadeiro; caso contrário, retorna falso

Descrição:

Você só pode usar operações de pilha padrão - ou seja, apenas empurrar para cima, peek / pop de cima, tamanho e operações vazias são legais.

O idioma que você está usando pode não oferecer suporte a pilhas. Você pode usar list ou deque (fila dupla) para simular uma pilha, desde que seja uma operação de pilha padrão.

Avançado:

Você pode implementar uma fila com O (1) tempo amortizado para cada operação? Em outras palavras, a complexidade de tempo total para realizar n operações é O (n), mesmo que uma das operações possa demorar muito.

Exemplo:

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

解释 :
MyQueue myQueue = new MyQueue ();
myQueue.push (1); // a fila é: [1]
myQueue.push (2); // a fila é: [1, 2] (mais à esquerda é a frente da fila)
myQueue.peek (); // retorna 1
myQueue.pop (); // retorna 1, a fila é [2]
myQueue.empty (); // retorna falso

mensagem:

1 <= x <= 9
Chama push, pop, peek e empty até 100 vezes,
assumindo que todas as operações são válidas (por exemplo, uma fila vazia não chamará operações pop ou peek)

Tópicos Relacionados Projeto de Pilha

Ideias para resolução de problemas

Esta questão é relativamente simples.Você só precisa entender que a pilha tem uma natureza do primeiro a entrar, primeiro a sair.
Insira a descrição da imagem aqui

Demonstração 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();
    }
}

Demonstração de efeito

A
resposta da informação foi bem-sucedida:
tempo de execução: 0 ms, derrotando 100,00% dos usuários Java.
Consumo de memória: 36,6 MB, derrotando 12,28% dos usuários Java

Acho que você gosta

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