Aplicativo de pilha e fila LeetCode - 150. Avaliação de expressão em polonês reverso

Quais problemas clássicos as pilhas e filas podem resolver? Todas as perguntas podem ser encontradas na minha página inicial, bem-vindo a todos para prestar atenção ~~

(1) Problema de correspondência de colchetes (pilha)

(2) Problema de desduplicação de string (pilha)

  (3) Problema de expressão polonesa reversa (pilha)

  (4) O próximo elemento maior (pilha monotônica)

(5) Receber água da chuva (pilha monótona)

(6) Problema máximo da janela deslizante (fila monotônica) 

(7) Top K elementos com mais ocorrências (fila de prioridade)

(8) Fila de implementação de pilha

(9) Pilha de implementação de fila 

1. Solução 

150. Avaliação da expressão polonesa reversa

Avalia a expressão em  notação polonesa reversa .

Os operadores válidos incluem  +, -, *, / . Cada operando pode ser um número inteiro ou outra expressão polonesa reversa.

Observe  que a divisão entre dois números inteiros mantém apenas a parte inteira.

É garantido que uma determinada expressão polonesa reversa sempre será válida. Ou seja, a expressão sempre resultará em um valor válido e não haverá divisão por zero.

 

class Solution {
    //可以看官方题解视频
    public int evalRPN(String[] tokens) {
        Deque<Integer> deque=new LinkedList<>();
        for(int i=0;i<tokens.length;i++){
            String token=tokens[i];
            if(token.equals("+")){
            int nums1=deque.pop();
            int nums2=deque.pop();
            deque.push(nums1+nums2);
            }else if(token.equals("-")){
            int nums1=deque.pop();
            int nums2=deque.pop();
            deque.push(nums2-nums1);
            }else if(token.equals("*")){
            int nums1=deque.pop();
            int nums2=deque.pop();
            deque.push(nums1*nums2);
            }else if(token.equals("/")){
            int nums1=deque.pop();
            int nums2=deque.pop();
            deque.push(nums2/nums1);
            }else{
            deque.push(Integer.valueOf(token));
            }
        }
        return deque.peek();
    }
}

2. Conhecimento básico da pilha

A característica mais notável da pilha é: primeiro a entrar, último a sair

1. Classes de implementação comuns de pilhas em Java:

A implementação mais básica: Stack<Integer> stack=new Stack<>();

Implementação de fila dupla: Deque<Integer> stack=new LinkedList<>();

2. Métodos comuns de pilha

push(x) -- empurra um elemento para o final da fila.
pop() -- remove um elemento do início da fila.
peek() -- retorna o elemento no início da fila.
empty() -- retorna se a fila está vazia.

3. Conhecimento básico de filas

A característica mais notável da fila é: primeiro a entrar primeiro a sair

1. Classes comuns de implementação de filas em Java:

Fila comum: Queue<Integer> queue=new LinkedList<>();

Fila dupla: Deque<Integer> queue=new LinkedList<>();

Fila de prioridade: PriorityQueue<Integer> fila=new PriorityQueue<>();

2. Métodos comuns de filas

add Adiciona um elemento Se a fila estiver cheia, lança uma exceção IIIegaISlabEepeplian
remove Remove e retorna o elemento no início da fila Se a fila estiver vazia, lança um
elemento NoSuchElementException Retorna o elemento no início da fila Se a fila estiver vazia , em seguida, lança um NoSuchElementException

size O número de elementos
oferecidos Adicionar um elemento e retornar true Se a fila estiver cheia, retornar false
poll Remover e retornar o elemento no início da fila Se a fila estiver vazia, retornar null
peek Retornar o elemento no início da fila Se a fila estiver vazia, retorne null


put adiciona um elemento, bloqueia se a fila estiver cheia
take remove e retorna o elemento no início da fila, bloqueia se a fila estiver vazia

Acho que você gosta

Origin blog.csdn.net/w20001118/article/details/127149042
Recomendado
Clasificación