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