1.
2 pointer:
2. Binary Tree BFS:
3. Topological Sort:
4. Binary Tree DFS:
5. Top K Elements:
6. Modified Binary Search
7. Subset:
8. Sliding window:
[Link]
1. Two Pointers
Descrição: Usar dois ponteiros para reduzir a complexidade ou simplificar a
iteração em uma estrutura de dados.
Aplicações:
Encontrar pares ou subarrays que satisfaçam condições específicas.
Resolver problemas de palíndromos.
Eliminar duplicatas ou mesclar arrays.
Exemplos:
Two Sum II - Input Array Is Sorted (LeetCode 167)
Valid Palindrome (LeetCode 125)
Container With Most Water (LeetCode 11)
2. Sliding Window
Descrição: Usar uma janela fixa ou variável para resolver problemas que envolvam
subarrays ou substrings.
Aplicações:
Encontrar o máximo, mínimo, ou soma de subarrays.
Trabalhar com substrings de comprimento fixo ou dinâmico.
Exemplos:
Maximum Sum Subarray of Size K
Longest Substring Without Repeating Characters (LeetCode 3)
Permutation in String (LeetCode 567)
3. Fast and Slow Pointers (Tortoise and Hare)
Descrição: Usar dois ponteiros que se movem em velocidades diferentes para detectar
ciclos em listas ligadas ou arrays.
Aplicações:
Detectar ciclos em listas ligadas.
Encontrar o ponto de interseção em problemas de ciclo.
Exemplos:
Linked List Cycle (LeetCode 141)
Find the Duplicate Number (LeetCode 287)
Happy Number (LeetCode 202)
4. Merge Intervals
Descrição: Resolver problemas relacionados à união ou manipulação de intervalos
ordenados.
Aplicações:
Combinar intervalos que se sobrepõem.
Inserir novos intervalos em uma lista.
Exemplos:
Merge Intervals (LeetCode 56)
Insert Interval (LeetCode 57)
Meeting Rooms II (LeetCode 253)
5. Cyclic Sort
Descrição: Usado para resolver problemas em arrays contendo números de um intervalo
fixo, normalmente sem usar espaço extra.
Aplicações:
Encontrar duplicatas, números desaparecidos ou o menor número positivo.
Exemplos:
Find All Numbers Disappeared in an Array (LeetCode 448)
Find the Duplicate Number (LeetCode 287)
Missing Number (LeetCode 268)
6. In-place Reversal of a Linked List
Descrição: Reverter sublistas ou toda uma lista ligada sem usar espaço extra.
Aplicações:
Reversão de listas ligadas.
Encontrar palíndromos em listas ligadas.
Exemplos:
Reverse Linked List (LeetCode 206)
Reverse Nodes in k-Group (LeetCode 25)
Palindrome Linked List (LeetCode 234)
7. Tree Traversal
Descrição: Percorrer árvores binárias em diferentes ordens (pré-ordem, in-ordem,
pós-ordem, BFS, DFS).
Aplicações:
Resolução de problemas de árvores.
Encontrar a soma de caminhos, profundidade máxima, etc.
Exemplos:
Binary Tree Level Order Traversal (LeetCode 102)
Maximum Depth of Binary Tree (LeetCode 104)
Path Sum (LeetCode 112)
8. BFS/DFS
Descrição: Usar buscas em largura (BFS) ou profundidade (DFS) para percorrer
grafos, árvores ou grids.
Aplicações:
Explorar grafos e grids.
Resolver problemas de conectividade.
Exemplos:
Word Ladder (LeetCode 127)
Number of Islands (LeetCode 200)
Clone Graph (LeetCode 133)
9. Backtracking
Descrição: Explorar todas as possibilidades e retroceder quando necessário.
Aplicações:
Resolver problemas de permutação e combinação.
Problemas de tabuleiro (e.g., Sudoku, N-Queens).
Exemplos:
Permutations (LeetCode 46)
Subsets (LeetCode 78)
N-Queens (LeetCode 51)
10. Dynamic Programming
Descrição: Resolver problemas quebrando-os em subproblemas menores e memorizando os
resultados.
Aplicações:
Problemas de otimização.
Resolver problemas de subsequências e caminhos mínimos.
Exemplos:
Longest Increasing Subsequence (LeetCode 300)
House Robber (LeetCode 198)
Coin Change (LeetCode 322)
11. Greedy
Descrição: Fazer escolhas locais que parecem ser ótimas no momento.
Aplicações:
Minimizar ou maximizar um valor.
Seleção de intervalos.
Exemplos:
Jump Game (LeetCode 55)
Gas Station (LeetCode 134)
Partition Labels (LeetCode 763)
12. Bit Manipulation
Descrição: Usar operações bit a bit para resolver problemas relacionados a números
binários.
Aplicações:
Encontrar o único número que aparece uma vez.
Contar bits.
Exemplos:
Single Number (LeetCode 136)
Number of 1 Bits (LeetCode 191)
Counting Bits (LeetCode 338)