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) Problema máximo da janela deslizante (fila monotônica)
(5) Top K elementos com mais ocorrências (fila de prioridade)
(6) Fila de implementação de pilha
(7) Pilha de implementação de fila
1. Solução
Dada uma string que contém apenas '('
, ')'
, '{'
, '}'
, '['
, determine se a string é válida.']'
s
Uma string válida deve satisfazer:
- Um colchete de abertura deve ser fechado com um colchete de fechamento do mesmo tipo.
- Os parênteses de abertura devem ser fechados na ordem correta.
- Cada parêntese de fechamento tem um parêntese de abertura correspondente do mesmo tipo
class MyQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;
public MyQueue() {
stack1=new Stack<>();
stack2=new Stack<>();
}
public void push(int x) {
stack1.push(x);
}
public int pop() {
if(!stack2.isEmpty()){
return stack2.pop();
}
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
public int peek() {
if(!stack2.isEmpty()){
return stack2.peek();
}
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.peek();
}
public boolean empty() {
return stack1.isEmpty()&&stack2.isEmpty();
}
}
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