Quels problèmes classiques les piles et les files d'attente peuvent-elles résoudre ? Chaque question peut être trouvée sur ma page d'accueil, bienvenue à tout le monde pour faire attention ~~
(1) Problème d'appariement des brackets (pile)
(2) Problème de déduplication de chaînes (pile)
(3) Problème d'expression polonaise inversée (pile)
(4) L'élément le plus grand suivant (pile monotone)
(5) Recevoir l'eau de pluie (pile monotone)
(6) Problème maximum de fenêtre glissante (file d'attente monotone)
(7) Top K éléments avec le plus d'occurrences (file d'attente prioritaire)
(8) File d'attente d'implémentation de la pile
(9) Pile d'implémentation de file d'attente
1. Solutions
32. Parenthèses valides les plus longues
Étant donné une chaîne contenant uniquement '('
et ')'
, trouvez la longueur de la plus longue sous-chaîne entre parenthèses valide (bien formée et consécutive).
class Solution {
public int longestValidParentheses(String s) {
Deque<Integer> deque=new LinkedList<>();
int max=0;
deque.push(-1);//栈底永远是最后一个无法被匹配的括号索引
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('){
deque.push(i);
}else{
//有匹配的就进行匹配
if(deque.size()>1){
deque.pop();
max=Math.max(max,i-deque.peek());
}else{//没有可以匹配的了,就将栈底索引更新为当前索引
deque.pop();
deque.push(i);//
}
}
}
return max;
}
}
2. Connaissance de base de la pile
La caractéristique la plus notable de la pile est : premier entré dernier sorti
1. Classes d'implémentation courantes des piles en Java :
L'implémentation la plus basique : Stack<Integer> stack=new Stack<>();
Implémentation d'une file d'attente double : Deque<Integer> stack=new LinkedList<>();
2. Méthodes courantes de pile
push(x) -- pousse un élément vers la fin de la file d'attente.
pop() -- supprime un élément de la tête de la file d'attente.
peek() -- renvoie l'élément en tête de la file d'attente.
empty() -- renvoie si la file d'attente est vide.
3. Connaissance de base des files d'attente
La caractéristique la plus notable de la file d'attente est : premier entré, premier sorti
1. Classes d'implémentation courantes des files d'attente en Java :
File d'attente ordinaire : Queue<Integer> queue=new LinkedList<>();
File d'attente double : Deque<Integer> queue=new LinkedList<>();
File d'attente prioritaire : PriorityQueue<Integer> queue=new PriorityQueue<>();
2. Méthodes courantes de files d'attente
add Ajoute un élément Si la file est pleine, lance une exception IIIegaISlabEepeplian
remove Supprime et retourne l'élément en tête de file Si la file est vide, lance un
élément NoSuchElementException Renvoie l'élément en tête de file Si la file est vide , puis lance une NoSuchElementException
size Le nombre d'éléments
proposés Ajouter un élément et retourner vrai Si la file est pleine, retourner faux
poll Supprimer et retourner l'élément en tête de file Si la file est vide, retourner null
peek Retourner l'élément en tête de file Si la file d'attente est vide, retourne null
put ajoute un élément, bloque si la file est pleine
take supprime et renvoie l'élément en tête de file, bloque si la file est vide