Recomendado para leitura online (o acesso ao GitHub costuma ser instável no país)
Sincronização Gitee recomendada
- Introdução : Este projeto é um conjunto completo de planos de teste, projetado para ajudar todos a evitar desvios, aprender algoritmos passo a passo e seguir o autor.
- Publicado oficialmente : "Code Thoughts".
- Versão em PDF : versão em PDF de "Code Random Notes" sobre algoritmos.
- Classe aberta de algoritmo : classe aberta de vídeo do algoritmo "Code Random Record".
- O ensaio mais forte em oito partes : Pensamentos aleatórios sobre o código que registra a essência do planeta do conhecimento PDF.
- A ordem de resposta às perguntas : O README organizou a ordem de resposta às perguntas. Você pode simplesmente respondê-las uma por uma em ordem.
- Comunidade de aprendizagem : Aprenda juntos sobre check-in/habilidades de entrevista/como escolher uma oferta/recomendações de grandes empresas/regras do local de trabalho/modificação de currículo/compartilhamento de tecnologia/vida do programa. Bem-vindo ao planeta do conhecimento "Code Caprice".
- Enviar código : Este projeto usa a linguagem C++ para explicar, mas já existem versões em vários idiomas, como Java, Python, Go, JavaScript, etc. Obrigado a todos os contribuidores aqui. Se você também quiser contribuir com código para iluminar seu avatar. , clique em Saiba como enviar seu código aqui.
- Nota para reimpressão : Todos os artigos a seguir são trabalhos originais de minha autoria (programador Carl). Por favor, indique a fonte ao citar artigos deste projeto. Se você encontrar plágio ou transferência maliciosa, usará armas legais para proteger seus direitos e interesses. Vamos manter juntos um bom ambiente de criação técnica!
Guia de escovação de perguntas LeetCode
Antecedentes do guia de escovação de perguntas
Muitos estudantes que acabaram de começar a responder perguntas ficam confusos: diante de quase 2.000 perguntas sobre leetcode, por onde começar.
Todos sentem que a eficiência de responder às perguntas é ineficiente e o tempo é desperdiçado principalmente em três pontos:
- Encontre perguntas
- Encontrou uma pergunta que não deveria ser feita nesta fase
- Não existe um conjunto completo de soluções de problemas de alta qualidade para referência.
Na verdade, já respondi a essa pergunta antes em Zhihu. A resposta é aproximadamente a seguinte: array-> lista vinculada-> tabela hash-> string-> pilha e fila-> árvore-> retrocesso-> ganancioso-> Programação Dinâmica - > Teoria dos Grafos -> Estruturas de Dados Avançadas, depois comece pelas simples, e após fazer alguns tipos de questões, passe gradativamente para questões médias e difíceis.
Mas posso me colocar no meu lugar e sentir: mesmo com um plano tão geral, é muito difícil para um iniciante ou mesmo um veterano em algoritmos encontrar um tópico que lhe agrade. O custo de tempo é muito alto, e o tópico não é. necessariamente um tema clássico.
Quando se trata de responder perguntas, todos queremos aproveitar o menor tempo possível para fazer todas as perguntas clássicas em ordem passo a passo de dificuldade , para que a eficiência seja máxima!
Então compilei um guia para esclarecer as perguntas do Leetcode: uma ordem superdetalhada de resposta às perguntas. Cada pergunta é cuidadosamente selecionada por mim. São todas perguntas de entrevista clássicas e de alta frequência . O README organizou a ordem das perguntas, e a ordem dos artigos é a ordem de resposta às perguntas! Basta escová-los um por um, você não precisa passar por um mar de perguntas e escolher você mesmo os temas!
Além disso, escrevi soluções detalhadas para cada questão (com fotos e textos, e vídeos sobre pontos difíceis), e minhas soluções estão listadas na página inicial das questões correspondentes.
Então agora resolvi a ordem de resposta às perguntas para ajudar mais alunos que estão aprendendo algoritmos a evitar desvios!
Se você estiver escovando o Leetcode, é altamente recomendável seguir a ordem de resolução das questões deste guia. Depois de terminar a escovação, você descobrirá que deu um salto qualitativo em todo o sistema de conhecimento e não precisa procurar. direções no mar de perguntas.
Os artigos mais recentes serão publicados primeiro na conta pública “Code Caprice”. Digitalize o código para dar uma olhada e você descobrirá que é tarde demais para conhecê-lo!
Como usar este guia de teste
De acordo com a ordem de disposição mencionada acima, basta começar a escovar a partir da matriz. A ordem está organizada, então basta escovar na ordem.
No guia de perguntas, cada tópico tem um capítulo de fundamentação teórica no início. Não é como uma introdução teórica semelhante a um livro didático, mas um resumo do conhecimento básico necessário para o combate real. Há um resumo no final de cada tópico, que é o resumo mais completo do tópico.
Se você é um veterano em algoritmos, este guia também é o melhor material para revisão. Se você ler rapidamente o resumo de cada série, todo o sistema de conhecimento do algoritmo e várias soluções voltarão à sua mente.
Cada solução aqui é uma obra-prima e merece consideração cuidadosa .
Eu uso C++ uniformemente nas explicações dos problemas, mas você descobrirá que quase todas as explicações dos problemas abaixo estão equipadas com outras versões de linguagem, como Java, Python, Go, JavaScript, etc. , também controlarei estritamente a qualidade do código.
Portanto, todos são bem-vindos para participar, melhorar as soluções de problemas em vários idiomas, adotar o código aberto e beneficiar mais amigos .
Você está pronto? Vamos começar o guia do teste, vá, vá, vá!
Prefácio
variedade
- Matrizes são muito simples, mas você deve saber disso!
- Matriz: 704. Pesquisa binária
- Matriz: 27. Remover elementos
- Matriz: 977. Quadrado da matriz ordenada
- Matriz: 209. Submatriz com comprimento mínimo
- Matriz: soma do intervalo
- Matriz: Desenvolvedor compra terreno
- Matriz: 59. Matriz Espiral II
- Matrizes: Resumo
lista vinculada
- Aqui está o que você deve saber sobre listas vinculadas!
- Lista vinculada: 203. Remover elementos da lista vinculada
- Lista vinculada: 707. Projetar lista vinculada
- Lista vinculada: 206. Inverta a lista vinculada
- Lista vinculada: 24. Troque nós na lista vinculada em pares
- Lista vinculada: 19. Exclua o enésimo nó da parte inferior da lista vinculada
- Lista vinculada: lista vinculada se cruza
- Lista vinculada: 142. Lista vinculada circular
- Lista vinculada: Resumo!
Tabela hash
- O que você deve saber sobre tabelas hash!
- Tabela hash: 242. Anagramas válidos
- Tabela hash: 1002. Encontre caracteres comuns
- Tabela hash: 349. Intersecção de duas matrizes
- Tabela hash: 202. Número feliz
- Tabela hash: 1. Soma de dois números
- Tabela hash: 454. Adição de quatro números II
- Tabela hash: 383. Carta de resgate
- Tabela hash: 15. Soma de três números
- Método de dois ponteiros: 18. Soma de quatro números
- Tabela hash: resumo!
corda
- Sequência: 344. Sequência reversa
- Sequência: 541. Sequência reversa II
- String: substitua números
- String: 151. Inverta as palavras na string
- String: string para destros
- Ajudá-lo a aprender completamente o algoritmo KMP
- String: 459. Substring repetida
- Sequência: Resumo!
método de ponteiro duplo
O método do ponteiro duplo é basicamente aplicado a problemas com arrays, strings e listas vinculadas.
- Matriz: 27. Remover elementos
- Sequência: 344. Sequência reversa
- String: substitua números
- String: 151. Inverta as palavras na string
- Lista vinculada: 206. Inverta a lista vinculada
- Lista vinculada: 19. Exclua o enésimo nó da parte inferior da lista vinculada
- Lista vinculada: lista vinculada se cruza
- Lista vinculada: 142. Lista vinculada circular
- Ponteiro duplo: 15. Soma de três números
- Ponteiros duplos: 18. Soma de quatro números
- Dicas duplas: Resumo!
Pilhas e filas
- Pilhas e filas: fundamentos teóricos
- Pilha e fila: 232. Use pilha para implementar fila
- Pilha e fila: 225. Use a fila para implementar a pilha
- Pilhas e filas: 20. Parênteses válidos
- Pilhas e filas: 1047. Remova todas as duplicatas adjacentes em uma string
- Pilhas e filas: 150. Avaliação de expressão polonesa reversa
- Pilhas e filas: 239. Janela deslizante máxima
- Pilha e fila: 347. K principais elementos de alta frequência
- Pilhas e filas: Resumo!
Árvore binária
O esboço da classificação do tópico é o seguinte:
- Aqui está o que você deve saber sobre árvores binárias!
- Árvore Binária: Travessia Recursiva da Árvore Binária
- Árvore binária: travessia iterativa de uma árvore binária
- Árvore binária: método de iteração unificado para árvores binárias
- Árvore binária: travessia de ordem de nível de uma árvore binária
- Árvore Binária: 226. Inverter Árvore Binária
- Resumo desta semana! (árvore binária)
- Árvore Binária: 101. Árvore Binária Simétrica
- Árvore binária: 104. A profundidade máxima de uma árvore binária
- Árvore binária: 111. Profundidade mínima da árvore binária
- Árvore binária: 222. O número de nós em uma árvore binária completa
- Árvore Binária: 110. Árvore Binária Balanceada
- Árvore binária: 257. Todos os caminhos da árvore binária
- Concluindo esta semana! (árvore binária)
- Árvore binária: 404. Soma das folhas esquerdas
- Árvore binária: 513. Encontre o valor no canto inferior esquerdo da árvore
- Árvore binária: 112. Soma do caminho
- Árvore binária: 106. Construa uma árvore binária
- Árvore binária: 654. Árvore binária máxima
- Resumo desta semana! (árvore binária)
- Árvore binária: 617. Mesclar duas árvores binárias
- Árvore binária: 700. A árvore de pesquisa binária aparece!
- Árvore binária: 98. Verifique a árvore de pesquisa binária
- Árvore binária: 530. Diferença absoluta mínima da árvore de pesquisa
- Árvore binária: 501. Modo na árvore de pesquisa binária
- Árvore Binária: 236. Problema Ancestral Comum
- Resumo desta semana! (árvore binária)
- Árvore Binária: 235. Procure o ancestral comum mais próximo da árvore
- Árvore Binária: 701. Operação de Inserção na Árvore de Pesquisa
- Árvore binária: 450. Operação de exclusão na árvore de pesquisa
- Árvore binária: 669. Podando a árvore de pesquisa binária
- Árvore binária: 108. Converter array ordenado em árvore de pesquisa binária
- Árvore binária: 538. Converter árvore de pesquisa binária em árvore cumulativa
- Árvore Binária: Resumo! (Todas as habilidades de árvore binária que você precisa dominar estão aqui)
Algoritmo de retrocesso
O esboço da classificação do tópico é o seguinte:
- Aqui está o que você deve saber sobre algoritmos de retrocesso!
- Algoritmo de retrocesso: 77. Combinação
- Algoritmo de retrocesso: 77. Otimização Combinatória
- Algoritmo de retrocesso: 216. Soma Combinatória III
- Algoritmo de retrocesso: 17. Combinação alfabética de números de telefone
- Resumo desta semana! (Algoritmo de retrocesso série um)
- Algoritmo de retrocesso: 39. Soma Combinatória
- Algoritmo de retrocesso: 40. Soma Combinatória II
- Algoritmo de retrocesso: 131. Sequência de palíndromo dividida
- Algoritmo de retrocesso: 93. Restaurar endereço IP
- Algoritmo de retrocesso: 78.Subconjunto
- Resumo desta semana! (Algoritmo de retrocesso série 2)
- Algoritmo de retrocesso: 90. Subconjunto II
- Algoritmo de retrocesso: 491. Subsequência crescente
- Algoritmo de retrocesso: 46. Permutação completa
- Algoritmo de retrocesso: 47. Permutação Total II
- Resumo desta semana! (Algoritmo de retrocesso série três)
- Outra maneira de escrever o algoritmo de retrocesso para remover duplicatas
- Algoritmo de retrocesso: 332. Reorganizar itinerário
- Algoritmo de retrocesso: 51.N Queen
- Algoritmo de retrocesso: 37. Resolva Sudoku
- Resumo do algoritmo de retrocesso
algoritmo ganancioso
O esboço da classificação do tópico é o seguinte:
- O que você deve saber sobre algoritmos gananciosos!
- Algoritmo ganancioso: 455. Distribuir cookies
- Algoritmo ganancioso: 376. Sequência de swing
- Algoritmo ganancioso: 53. Soma máxima da subsequência
- Resumo desta semana! (Série de algoritmos gananciosos 1)
- Algoritmo Ganancioso: 122. Melhor momento para comprar e vender ações II
- Algoritmo ganancioso: 55. Jogo de salto
- Algoritmo ganancioso: 45. Jump Game II
- Algoritmo ganancioso: soma da matriz maximizada após negações de 1005.K
- Resumo desta semana! (Série 2 de algoritmos gananciosos)
- Algoritmo ganancioso: 134. Posto de gasolina
- Algoritmo ganancioso: 135. Distribuir doces
- Algoritmo ganancioso: 860. Troco de limonada
- Algoritmo ganancioso: 406. Reconstrua a fila com base na altura
- Resumo desta semana! (Algoritmo ganancioso série 3)
- Algoritmo ganancioso: 406. Reconstruir fila com base na altura (sequela)
- Algoritmo Ganancioso: 452. Detonar o balão com o número mínimo de flechas
- Algoritmo ganancioso: 435. Sem intervalos sobrepostos
- Algoritmo ganancioso: 763. Divida os intervalos das letras
- Algoritmo ganancioso: 56. Mesclar intervalos
- Resumo desta semana! (Algoritmo ganancioso série 4)
- Algoritmo ganancioso: 738. Números crescentes monotonicamente
- Algoritmo ganancioso: 968. Monitorar árvore binária
- Algoritmo ganancioso: Resumo! (Todo resumo deve ser clássico)
programação dinâmica
O tema da programação dinâmica já começou, não dá tempo de explicar, amigos, entrem no ônibus e não fiquem para trás!
- O que você deve saber sobre programação dinâmica!
- Programação Dinâmica: 509. Números de Fibonacci
- Programação dinâmica: 70. Subir escadas
- Programação dinâmica: 746. Suba escadas com custo mínimo
- Resumo desta semana! (Série de Planejamento Dinâmico 1)
- Programação dinâmica: 62. Caminhos diferentes
- Programação Dinâmica: 63. Caminhos Diferentes II
- Programação Dinâmica: 343. Divisão Inteira
- Programação Dinâmica: 96. Diferentes Árvores de Pesquisa Binária
- Resumo desta semana! (Série de Programação Dinâmica 2)
Série de problemas de mochila:
- Programação dinâmica: 01 Mochila de base teórica
- Programação dinâmica: 01 Mochila de base teórica (rolling array)
- Programação Dinâmica: 416. Particionando Subconjuntos Equisum
- Programação Dinâmica: 1049. O Peso da Última Pedra II
- Resumo desta semana! (Série de Planejamento Dinâmico 3)
- Programação Dinâmica: 494. Objetivo e
- Programação Dinâmica: 474. Uns e Zeros
- Programação Dinâmica: Resumo Completo da Mochila
- Programação Dinâmica: 518. Change Exchange II
- Resumo desta semana! (Série de Programação Dinâmica 4)
- Programação Dinâmica: 377. Soma Combinatória IV
- Programação dinâmica: 70. Subida de escadas (versão completa para mochila)
- Programação dinâmica: 322. Troca de mudanças
- Programação Dinâmica: 279. Números Quadrados Perfeitos
- Resumo desta semana! (Série de Programação Dinâmica 5)
- Programação Dinâmica: 139. Divisão de palavras
- Programação Dinâmica: Base Teórica de Múltiplas Mochilas
- Resumo do problema da mochila
Série de roubo:
- Programação dinâmica: 198. Roubo
- Programação Dinâmica: 213. Roubo II
- Programação Dinâmica: 337. Roubo III
Série de ações:
- Programação Dinâmica: 121. Melhor momento para comprar e vender ações
- Programação Dinâmica: Resumo desta Semana (Série 6)
- Programação Dinâmica: 122. Melhores horários para comprar e vender ações II
- Programação Dinâmica: 123. Melhor momento para comprar e vender ações III
- Programação Dinâmica: 188. Melhor momento para comprar e vender ações IV
- Programação dinâmica: 309. O melhor momento para comprar e vender ações inclui o período de congelamento
- Programação Dinâmica: Resumo desta Semana (Série 7)
- Programação dinâmica: 714. O melhor momento para comprar e vender ações, incluindo taxas de manuseio
- Programação Dinâmica: Resumo da Série de Ações
Série de subsequência:
- Programação dinâmica: 300. Subsequência crescente mais longa
- Programação Dinâmica: 674. Sequência Crescente Contínua Mais Longa
- Programação Dinâmica: 718. Subarray de Repetição Mais Longa
- Programação dinâmica: 1143. Subsequência comum mais longa
- Programação dinâmica: 1035. Linhas disjuntas
- Programação dinâmica: 53. Soma máxima de subsequência
- Programação dinâmica: 392. Determinando subsequências
- Programação Dinâmica: 115. Diferentes subsequências
- Programação dinâmica: 583. Operação de exclusão de duas strings
- Programação Dinâmica: 72. Editar Distância
- Editar resumo de distância
- Programação dinâmica: 647. Substring do palíndromo
- Programação dinâmica: 516. Maior subsequência do palíndromo
- Resumo da programação dinâmica
pilha monotônica
- Pilha monótona: 739. Temperatura diária
- Pilha monótona: 496. Próximo elemento maior I
- Pilha monótona: 503. Próximo elemento maior II
- Pilha monótona: 42. Captando água da chuva
- Pilha monotônica: 84. Maior retângulo no histograma
teoria dos grafos
Teoria dos grafos lançada oficialmente
- Teoria dos grafos: fundamentos teóricos
- Teoria dos grafos: base teórica da pesquisa em profundidade
- Teoria dos grafos: todos os caminhos acessíveis
- Teoria dos grafos: base teórica da pesquisa em amplitude
- Teoria dos Grafos: Número de Ilhas Versão de Pesquisa Profunda.
- Teoria dos grafos: Número de ilhas versão Guangsou.
- Teoria dos Grafos: Área Máxima de uma Ilha
- Teoria dos grafos: Área total da ilha
- Teoria dos Grafos: A Ilha Submersa
- Teoria dos grafos: problema de fluxo de água
- Teoria dos Grafos: Construindo a Maior Ilha
- Teoria dos Grafos: Paciência de Cordas
- Teoria dos Grafos: Acessibilidade Completa de Gráficos Direcionados
- Teoria dos Grafos: Perímetro de uma Ilha
- Teoria dos grafos: fundamentos da teoria da busca sindical
- Teoria dos Grafos: Encontrando Caminhos para a Existência
- Teoria dos Grafos: Conexões Redundantes
- Teoria dos Grafos: Conexões Redundantes II
- Teoria dos grafos: prim da árvore geradora mínima
- Teoria dos grafos: Kruskal da árvore geradora mínima
- Teoria dos Grafos: Classificação Topológica
- Teoria dos grafos: dijkstra (versão ingênua)
- Teoria dos grafos: dijkstra (versão otimizada para heap)
- Teoria dos grafos: algoritmo Bellman_ford
- Teoria dos Grafos: Algoritmo de Otimização de Fila Bellman_ford (também conhecido como SPFA)
- Teoria dos grafos: ciclo de peso negativo do julgamento de Bellman_ford
- Teoria dos grafos: caminho mais curto finito de fonte única de Bellman_ford
- Teoria dos Grafos: Algoritmo de Floyd
- Teoria dos grafos: algoritmo A*
- Teoria dos Grafos: Resumo do Algoritmo do Caminho Mais Curto
- Teoria dos Grafos: Resumo da Teoria dos Grafos
(Atualizando continuamente...)
Classificação dos dez primeiros
teoria dos números
Perguntas clássicas sobre estrutura de dados avançada
- E pesquise a coleção
- árvore geradora mínima
- Árvore de segmento
- matriz de árvore
- árvore de dicionário
Processamento massivo de dados
Perguntas complementares
As questões acima são de prioridade máxima. Você deve estudá-las pelo menos duas vezes para entendê-las completamente. Se você for proficiente nas questões acima e ainda estiver procurando outras questões para praticar, poderá estudar as seguintes questões novamente:
Essas perguntas são muito boas, mas algumas delas são semelhantes ao guia de escovação de perguntas, e algumas das soluções de problemas serão complementadas posteriormente, portanto, não as incluí no guia de escovação de perguntas. Vou melhorar algumas das soluções de problemas no futuro e depois incorporá-las na estratégia de resolução de problemas.
variedade
- 1365. Quantos números existem menores que o número atual?
- 941. Matriz de montanha válida (ponteiro duplo)
- 1207. Aplicação clássica de array único de ocorrências em hash
- 283. Mover zero [matriz] [ponteiro duplo]
- 189. Girar matriz
- 724.Encontrando o índice central de uma matriz
- 34. Encontre a primeira e a última posição de um elemento em uma matriz classificada (método de bissecção)
- 922. Classificar matriz por ímpar e par II
- 35.Procure posição de inserção
lista vinculada
- 24. Troque nós na lista vinculada em pares
- 234. Lista vinculada do palíndromo
- 143. Reorganizar a lista vinculada [array] [fila bidirecional] [operar diretamente a lista vinculada]
- 141. Lista circular vinculada
- 160. Listas vinculadas cruzadas
Tabela hash
- 205. Strings isomórficas: [Aplicação de tabelas hash]
corda
- 925. Pressione e segure para simular a correspondência
- 0844. Compare strings contendo backspace [simulação de pilha] [ponteiros duplos com melhor espaço]
Árvore binária
- 129. Encontre a soma dos números da raiz aos nós folha
- 1382. Converta a árvore de pesquisa binária em equilíbrio e construa uma árvore de pesquisa binária balanceada
- 100. A mesma árvore tem a mesma ideia de 101. Árvore binária simétrica
- 116. Preencha o próximo ponteiro do nó direito de cada nó
Algoritmo de retrocesso
ambicioso
- 649.Dota2 Senado é difícil
- 1221. Dividir personagens balanceados é simples e ganancioso
programação dinâmica
- 5. A substring do palíndromo mais longa é quase igual à substring do palíndromo 647.
- 132. Split Palindrome String II é muito semelhante a 647. Palindrome Substring e 5. Longest Palindrome Substring
- 673.O número de subsequências crescentes mais longas
teoria dos grafos
- 463.Perímetro da ilha (simulação)
- 841. Chaves e salas [gráfico direcionado] dfs, bfs podem ser usados
- 127.Word Solitário
E pesquise a coleção
- 684.Conexão redundante [perguntas básicas sobre pesquisa combinada]
- 685. Conexão redundante II [aplicação de pesquisa de união]
simulação
- 657.O robô pode retornar à origem?
- 31.Próximo arranjo
Operações de bits
- 1356. Classifique de acordo com o número de 1 no sistema binário digital
modelo de algoritmo
Vários modelos básicos de algoritmos
Contribuinte
Clique aqui para ver todos os colaboradores do LeetCode-Master. Obrigado a eles por complementar versões do LeetCode-Master em outros idiomas para que mais leitores possam se beneficiar deste projeto.
Tendências Estelares
Sobre o autor
Olá a todos, sou o programador Carl, pesquisador sênior do Harbin Institute of Technology e autor de "Code Captions". Estou envolvido na pesquisa e desenvolvimento de tecnologias de back-end subjacentes na Tencent e no Baidu.
Baixar PDF
Adicione a seguinte conta corporativa do WeChat e a versão em PDF será enviada automaticamente para todos. Você também pode escolher se deseja ingressar no grupo de resposta a perguntas.
Lembre-se de fazer uma anotação ao adicionar o WeChat. Se você já estiver trabalhando, anote: nome-cidade-posição. Se for estudante, observe: nome-escola-série. Nota: Se você não se apresentar, não poderá passar.