Mais de 120 desafios de codificação continuamente atualizados, interativos e orientados a testes , com flashcards Anki.
Os desafios se concentram em algoritmos e estruturas de dados encontrados na codificação de entrevistas .
Cada desafio possui uma ou mais soluções de referência que são:
Em breve, os desafios fornecerão dicas incrementais sob demanda para ajudá-lo a chegar à solução ideal.
Os cadernos também detalham:
Também estão incluídas implementações de referência testadas em unidade de várias estruturas de dados e algoritmos.
O baralho de flashcards Anki fornecido usa repetição espaçada para ajudá-lo a reter os conceitos principais.
Ótimo para usar em trânsito.
Procurando recursos para ajudá-lo a se preparar para as entrevistas de Design de Sistema e Design Orientado a Objetos ?
Confira o repositório irmão The System Design Primer, que contém decks Anki adicionais:
Cada desafio possui dois cadernos, um caderno de desafios com testes unitários para você resolver e um caderno de soluções para referência.
Formato : Categoria do Desafio - Número de Desafios
Número total de desafios: 120
Implementações totalmente funcionais e testadas em unidade das seguintes estruturas de dados:
Implementações testadas em unidade e totalmente funcionais dos seguintes algoritmos:
Créditos da imagem
Desafio | Caderno Estático |
---|---|
Determinar se uma string contém caracteres exclusivos | Desafio │ Solução |
Determine se uma string é uma permutação de outra | Desafio │ Solução |
Determine se uma string é uma rotação de outra | Desafio │ Solução |
Comprimir uma string | Desafio │ Solução |
Reverter caracteres em uma string | Desafio │ Solução |
Dadas duas strings, encontre o único caractere diferente | Desafio │ Solução |
Encontre dois índices que somam um valor específico | Desafio │ Solução |
Implementar uma tabela hash | Desafio │ Solução |
Implementar fizz buzz | Desafio │ Solução |
Encontre o primeiro caractere não repetido em uma string | Contribuir │ Contribuir |
Remover caracteres especificados em uma string | Contribuir │ Contribuir |
Reverter palavras em uma string | Contribuir │ Contribuir |
Converter uma string em um número inteiro | Contribuir │ Contribuir |
Converter um número inteiro em uma string | Contribuir │ Contribuir |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Caderno Estático |
---|---|
Remover duplicatas de uma lista vinculada | Desafio │ Solução |
Encontre o k-ésimo até o último elemento de uma lista vinculada | Desafio │ Solução |
Exclua um nó no meio de uma lista vinculada | Desafio │ Solução |
Particionar uma lista vinculada em torno de um determinado valor | Desafio │ Solução |
Adicione dois números cujos dígitos estão armazenados em uma lista vinculada | Desafio │ Solução |
Encontre o início de um loop de lista vinculada | Desafio │ Solução |
Determine se uma lista vinculada é um palíndromo | Desafio │ Solução |
Implementar uma lista vinculada | Desafio │ Solução |
Determine se uma lista é cíclica ou acíclica | Contribuir │ Contribuir |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Caderno Estático |
---|---|
Implemente n pilhas usando um único array | Desafio │ Solução |
Implemente uma pilha que monitore seu elemento mínimo | Desafio │ Solução |
Implementar um conjunto de classes de pilhas que agrupa uma lista de pilhas com capacidade limitada | Desafio │ Solução |
Implementar uma fila usando duas pilhas | Desafio │ Solução |
Classifique uma pilha usando outra pilha como buffer | Desafio │ Solução |
Implementar uma pilha | Desafio │ Solução |
Implementar uma fila | Desafio │ Solução |
Implemente uma fila de prioridade apoiada por um array | Desafio │ Solução |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Cadernos estáticos |
---|---|
Implementar pesquisa em profundidade (pré, em, pós-ordem) em uma árvore | Desafio │ Solução |
Implementar pesquisa ampla em uma árvore | Desafio │ Solução |
Determine a altura de uma árvore | Desafio │ Solução |
Crie uma árvore de pesquisa binária com altura mínima a partir de uma matriz classificada | Desafio │ Solução |
Crie uma lista vinculada para cada nível de uma árvore binária | Desafio │ Solução |
Verifique se uma árvore binária está balanceada | Desafio │ Solução |
Determine se uma árvore é uma árvore de pesquisa binária válida | Desafio │ Solução |
Encontre o sucessor em ordem de um determinado nó em uma árvore de pesquisa binária | Desafio │ Solução |
Encontre o segundo maior nó em uma árvore de pesquisa binária | Desafio │ Solução |
Encontre o menor ancestral comum | Desafio │ Solução |
Inverter uma árvore binária | Desafio │ Solução |
Implementar uma árvore de pesquisa binária | Desafio │ Solução |
Implementar um heap mínimo | Desafio │ Solução |
Implementar uma tentativa | Desafio │ Solução |
Implementar pesquisa em profundidade em um gráfico | Desafio │ Solução |
Implementar pesquisa ampla em um gráfico | Desafio │ Solução |
Determine se existe um caminho entre dois nós em um gráfico | Desafio │ Solução |
Implementar um gráfico | Desafio │ Solução |
Encontre uma ordem de construção com uma lista de projetos e dependências. | Desafio │ Solução |
Encontre o caminho mais curto em um gráfico ponderado. | Desafio │ Solução |
Encontre o caminho mais curto em um gráfico não ponderado. | Desafio │ Solução |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Cadernos estáticos |
---|---|
Implementar classificação por seleção | Desafio │ Solução |
Implementar classificação por inserção | Desafio │ Solução |
Implementar classificação rápida | Desafio │ Solução |
Implementar classificação por mesclagem | Desafio │ Solução |
Implementar classificação radix | Desafio │ Solução |
Classifique uma matriz de strings para que todos os anagramas fiquem próximos uns dos outros | Desafio │ Solução |
Encontre um item em uma matriz classificada e rotacionada | Desafio │ Solução |
Pesquise uma matriz classificada para um item | Desafio │ Solução |
Encontre um int que não esteja em uma entrada de n inteiros | Desafio │ Solução |
Dadas as matrizes classificadas A, B, mescle B em A na ordem classificada | Desafio │ Solução |
Implementar uma classificação de seleção estável | Contribuir │ Contribuir |
Tornar uma classificação instável estável | Contribuir │ Contribuir |
Implemente uma versão eficiente e local do quicksort | Contribuir │ Contribuir |
Dadas duas matrizes classificadas, mescle uma na outra na ordem de classificação | Contribuir │ Contribuir |
Encontre um elemento em uma matriz girada e classificada de inteiros | Contribuir │ Contribuir |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Cadernos estáticos |
---|---|
Implemente fibonacci de forma recursiva, dinâmica e iterativa | Desafio │ Solução |
Maximize os itens colocados em uma mochila | Desafio │ Solução |
Maximize os itens ilimitados colocados em uma mochila | Desafio │ Solução |
Encontre a subsequência comum mais longa | Desafio │ Solução |
Encontre a subsequência crescente mais longa | Desafio │ Solução |
Minimize o custo da multiplicação de matrizes | Desafio │ Solução |
Maximize os preços das ações dadas k transações | Desafio │ Solução |
Encontre o número mínimo de maneiras de representar n centavos dado um conjunto de moedas | Desafio │ Solução |
Encontre o número único de maneiras de representar n centavos dado um conjunto de moedas | Desafio │ Solução |
Imprima todas as combinações válidas de n pares de parênteses | Desafio │ Solução |
Navegue por um labirinto | Desafio │ Solução |
Imprimir todos os subconjuntos de um conjunto | Desafio │ Solução |
Imprimir todas as permutações de uma string | Desafio │ Solução |
Encontre o índice mágico em uma matriz | Desafio │ Solução |
Encontre o número de maneiras de executar n etapas | Desafio │ Solução |
Implemente as Torres de Hanói com 3 torres e N discos | Desafio │ Solução |
Implementar fatorial de forma recursiva, dinâmica e iterativa | Contribuir │ Contribuir |
Execute uma pesquisa binária em uma matriz classificada de inteiros | Contribuir │ Contribuir |
Imprimir todas as combinações de uma string | Contribuir │ Contribuir |
Implementar uma função de preenchimento de tinta | Contribuir │ Contribuir |
Encontre todas as permutações para representar n centavos, dadas moedas de 1, 5, 10, 25 centavos | Contribuir │ Contribuir |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Cadernos estáticos |
---|---|
Gere uma lista de primos | Desafio │ Solução |
Encontre a raiz digital | Desafio │ Solução |
Crie uma classe que suporte inserção, máximo, mínimo, média, modo em O(1) | Desafio │ Solução |
Determine se um número é uma potência de dois | Desafio │ Solução |
Adicione dois números sem o sinal + ou - | Desafio │ Solução |
Subtraia dois números sem o sinal + ou - | Desafio │ Solução |
Verifique se um número é primo | Contribuir │ Contribuir |
Determine se duas linhas em um plano cartesiano se cruzam | Contribuir │ Contribuir |
Usando apenas adição, implemente multiplicação, subtração e divisão para ints | Contribuir │ Contribuir |
Encontre o k-ésimo número tal que os únicos fatores primos sejam 3, 5 e 7 | Contribuir │ Contribuir |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Cadernos estáticos |
---|---|
Implementar operações comuns de manipulação de bits | Desafio │ Solução |
Determine o número de bits a serem trocados para converter a em b | Desafio │ Solução |
Desenhe uma linha em uma tela | Desafio │ Solução |
Vire um pouco para maximizar a sequência mais longa de 1s | Desafio │ Solução |
Obtenha o próximo maior e o próximo menor número | Desafio │ Solução |
Mesclar dois números binários | Desafio │ Solução |
Trocar bits pares e ímpares em um número inteiro | Desafio │ Solução |
Imprima a representação binária de um número entre 0 e 1 | Desafio │ Solução |
Determine o número de 1s na representação binária de um determinado número inteiro | Contribuir │ Contribuir |
Adicione um desafio | Contribuir │ Contribuir |
Desafio | Cadernos estáticos |
---|---|
Encontre a substring mais longa com no máximo k caracteres distintos | Desafio │ Solução |
Encontre o maior produto de três números | Desafio │ Solução |
Maximize o lucro das ações com 1 compra e 1 venda | Desafio │ Solução |
Mova todos os zeros de uma lista para o final | Desafio │ Solução |
Encontre os produtos de todos os outros int | Desafio │ Solução |
Dada uma lista de entradas e saídas, encontre o período de maior movimento | Desafio │ Solução |
Determine o perímetro de uma ilha | Desafio │ Solução |
Formatar chaves de licença | Desafio │ Solução |
Encontre o caminho absoluto mais longo do arquivo | Desafio │ Solução |
Mesclar intervalos de tuplas | Desafio │ Solução |
Atribuir cookies | Desafio │ Solução |
Determine se você pode vencer em Nim | Desafio │ Solução |
Verifique se uma revista poderia ter sido usada para criar uma nota de resgate | Desafio │ Solução |
Encontre o número de vezes que uma frase cabe em uma tela | Desafio │ Solução |
Árvore utópica | Desafio │ Solução |
Maximizando xor | Desafio │ Solução |
Adicione um desafio | Contribuir │ Contribuir |
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*Os notebooks (.ipynb) leem/gravam o arquivo de teste de unidade associado (.py).
Este README contém links para Binder , que hospeda blocos de notas dinâmicos do conteúdo do repositório online sem necessidade de instalação.
Correr:
pip install jupyter
Para obter instruções detalhadas, scripts e ferramentas para configurar seu ambiente de desenvolvimento de maneira mais otimizada, verifique o repositório dev-setup.
Para obter mais detalhes sobre a instalação do notebook, siga as instruções aqui.
Mais informações sobre notebooks IPython/Jupyter podem ser encontradas aqui.
Os desafios são fornecidos na forma de notebooks IPython/Jupyter e foram testados com Python 2.7 e Python 3.x.
Se você precisar instalar o IPython/Jupyter Notebook, consulte a seção Instalação do Notebook.
Execute o caderno de desafios:
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
Isso iniciará seu navegador com a lista de categorias de desafio:
Para depurar sua solução com pdb, consulte o ticket a seguir.
Observação: se a sua solução for diferente daquelas listadas no Caderno de soluções, considere enviar uma solicitação pull para que outras pessoas possam se beneficiar do seu trabalho. Revise as Diretrizes de Contribuição para obter detalhes.
Desafios, soluções e testes unitários são apresentados na forma de IPython/Jupyter Notebooks .
Contribuições são bem-vindas!
Revise as Diretrizes de Contribuição para obter detalhes sobre como:
Sinta-se à vontade para entrar em contato comigo para discutir quaisquer questões, perguntas ou comentários.
Minhas informações de contato podem ser encontradas na minha página do GitHub.
Estou fornecendo código e recursos neste repositório para você sob uma licença de código aberto. Como este é meu repositório pessoal, a licença que você recebe para meu código e recursos é minha e não de meu empregador (Facebook).
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.