Plus de 120 défis de codage continuellement mis à jour, interactifs et pilotés par des tests , avec les flashcards Anki.
Les défis se concentrent sur les algorithmes et les structures de données trouvés lors des entretiens de codage .
Chaque défi possède une ou plusieurs solutions de référence qui sont :
Les défis fourniront bientôt des conseils incrémentiels à la demande pour vous aider à trouver la solution optimale.
Les cahiers détaillent également :
Sont également incluses des implémentations de référence testées unitairement de diverses structures de données et algorithmes.
Le jeu de cartes mémoire Anki fourni utilise la répétition espacée pour vous aider à retenir les concepts clés.
Idéal pour une utilisation en déplacement.
Vous recherchez des ressources pour vous aider à préparer les entretiens de conception de systèmes et de conception orientée objet ?
Consultez le dépôt sœur The System Design Primer, qui contient des decks Anki supplémentaires :
Chaque défi comporte deux cahiers, un cahier de défi avec des tests unitaires à résoudre et un cahier de solutions à titre de référence.
Format : Catégorie de Défi - Nombre de Défis
Nombre total de défis : 120
Implémentations testées unitairement et entièrement fonctionnelles des structures de données suivantes :
Implémentations testées unitairement et entièrement fonctionnelles des algorithmes suivants :
Crédits images
Défi | Carnet statique |
---|---|
Déterminer si une chaîne contient des caractères uniques | Défi │ Solution |
Déterminer si une chaîne est une permutation d'une autre | Défi │ Solution |
Déterminer si une chaîne est une rotation d'une autre | Défi │ Solution |
Compresser une chaîne | Défi │ Solution |
Inverser les caractères dans une chaîne | Défi │ Solution |
Étant donné deux chaînes, trouvez le seul caractère différent | Défi │ Solution |
Trouver deux indices dont la somme correspond à une valeur spécifique | Défi │ Solution |
Implémenter une table de hachage | Défi │ Solution |
Mettre en œuvre le buzz pétillant | Défi │ Solution |
Rechercher le premier caractère non répété d'une chaîne | Contribuer │ Contribuer |
Supprimer les caractères spécifiés dans une chaîne | Contribuer │ Contribuer |
Inverser les mots dans une chaîne | Contribuer │ Contribuer |
Convertir une chaîne en entier | Contribuer │ Contribuer |
Convertir un entier en chaîne | Contribuer │ Contribuer |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnet statique |
---|---|
Supprimer les doublons d'une liste chaînée | Défi │ Solution |
Trouver le kième jusqu'au dernier élément d'une liste chaînée | Défi │ Solution |
Supprimer un nœud au milieu d'une liste chaînée | Défi │ Solution |
Partitionner une liste chaînée autour d'une valeur donnée | Défi │ Solution |
Ajouter deux numéros dont les chiffres sont stockés dans une liste chaînée | Défi │ Solution |
Trouver le début d'une boucle de liste chaînée | Défi │ Solution |
Déterminer si une liste chaînée est un palindrome | Défi │ Solution |
Implémenter une liste chaînée | Défi │ Solution |
Déterminer si une liste est cyclique ou acyclique | Contribuer │ Contribuer |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnet statique |
---|---|
Implémenter n piles en utilisant un seul tableau | Défi │ Solution |
Implémenter une pile qui garde la trace de son élément minimum | Défi │ Solution |
Implémenter un ensemble de classes de piles qui encapsule une liste de piles limitées en capacité | Défi │ Solution |
Implémenter une file d'attente en utilisant deux piles | Défi │ Solution |
Trier une pile en utilisant une autre pile comme tampon | Défi │ Solution |
Implémenter une pile | Défi │ Solution |
Implémenter une file d'attente | Défi │ Solution |
Implémenter une file d'attente prioritaire soutenue par un tableau | Défi │ Solution |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnets statiques |
---|---|
Implémenter une recherche en profondeur d'abord (pré-, in-, post-order) sur un arbre | Défi │ Solution |
Implémenter une recherche en largeur sur un arbre | Défi │ Solution |
Déterminer la hauteur d'un arbre | Défi │ Solution |
Créer un arbre de recherche binaire avec une hauteur minimale à partir d'un tableau trié | Défi │ Solution |
Créer une liste chaînée pour chaque niveau d'un arbre binaire | Défi │ Solution |
Vérifier si un arbre binaire est équilibré | Défi │ Solution |
Déterminer si un arbre est un arbre de recherche binaire valide | Défi │ Solution |
Trouver le successeur dans l'ordre d'un nœud donné dans un arbre de recherche binaire | Défi │ Solution |
Trouver le deuxième plus grand nœud dans un arbre de recherche binaire | Défi │ Solution |
Trouver l'ancêtre commun le plus bas | Défi │ Solution |
Inverser un arbre binaire | Défi │ Solution |
Implémenter un arbre de recherche binaire | Défi │ Solution |
Implémenter un tas min | Défi │ Solution |
Implémenter un essai | Défi │ Solution |
Implémenter une recherche en profondeur d'abord sur un graphique | Défi │ Solution |
Implémenter une recherche en largeur sur un graphique | Défi │ Solution |
Déterminer s'il existe un chemin entre deux nœuds dans un graphique | Défi │ Solution |
Implémenter un graphique | Défi │ Solution |
Recherchez un ordre de construction à partir d'une liste de projets et de dépendances. | Défi │ Solution |
Trouvez le chemin le plus court dans un graphique pondéré. | Défi │ Solution |
Trouvez le chemin le plus court dans un graphique non pondéré. | Défi │ Solution |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnets statiques |
---|---|
Implémenter le tri par sélection | Défi │ Solution |
Implémenter le tri par insertion | Défi │ Solution |
Implémenter le tri rapide | Défi │ Solution |
Implémenter le tri par fusion | Défi │ Solution |
Implémenter le tri par base | Défi │ Solution |
Trier un tableau de chaînes pour que toutes les anagrammes soient les unes à côté des autres | Défi │ Solution |
Rechercher un élément dans un tableau trié et pivoté | Défi │ Solution |
Rechercher une matrice triée pour un élément | Défi │ Solution |
Trouver un entier qui n'est pas dans une entrée de n entiers | Défi │ Solution |
Étant donné les tableaux triés A, B, fusionnez B dans A dans l'ordre trié | Défi │ Solution |
Implémenter un tri de sélection stable | Contribuer │ Contribuer |
Rendre stable un tri instable | Contribuer │ Contribuer |
Implémenter une version efficace et sur place du tri rapide | Contribuer │ Contribuer |
Étant donné deux tableaux triés, fusionnez-les l'un dans l'autre dans l'ordre trié | Contribuer │ Contribuer |
Rechercher un élément dans un tableau d'entiers pivoté et trié | Contribuer │ Contribuer |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnets statiques |
---|---|
Implémenter Fibonacci de manière récursive, dynamique et itérative | Défi │ Solution |
Maximiser les objets placés dans un sac à dos | Défi │ Solution |
Maximiser les objets illimités placés dans un sac à dos | Défi │ Solution |
Trouver la sous-séquence commune la plus longue | Défi │ Solution |
Trouver la sous-séquence croissante la plus longue | Défi │ Solution |
Minimiser le coût de la multiplication matricielle | Défi │ Solution |
Maximiser le cours des actions compte tenu de k transactions | Défi │ Solution |
Trouver le nombre minimum de façons de représenter n cents étant donné un ensemble de pièces | Défi │ Solution |
Trouver le nombre unique de façons de représenter n cents étant donné un éventail de pièces | Défi │ Solution |
Imprimer toutes les combinaisons valides de n paires de parenthèses | Défi │ Solution |
Naviguez dans un labyrinthe | Défi │ Solution |
Imprimer tous les sous-ensembles d'un ensemble | Défi │ Solution |
Imprimer toutes les permutations d'une chaîne | Défi │ Solution |
Trouver l'index magique dans un tableau | Défi │ Solution |
Trouver le nombre de façons de parcourir n étapes | Défi │ Solution |
Implémenter les Tours de Hanoi avec 3 tours et N disques | Défi │ Solution |
Implémenter factorielle de manière récursive, dynamique et itérative | Contribuer │ Contribuer |
Effectuer une recherche binaire sur un tableau trié d'entiers | Contribuer │ Contribuer |
Imprimer toutes les combinaisons d'une chaîne | Contribuer │ Contribuer |
Implémenter une fonction de remplissage de peinture | Contribuer │ Contribuer |
Trouver toutes les permutations pour représenter n cents, étant donné des pièces de 1, 5, 10, 25 cents | Contribuer │ Contribuer |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnets statiques |
---|---|
Générer une liste de nombres premiers | Défi │ Solution |
Trouver la racine numérique | Défi │ Solution |
Créer une classe prenant en charge le mode insertion, max, min, moyenne en O (1) | Défi │ Solution |
Déterminer si un nombre est une puissance de deux | Défi │ Solution |
Additionnez deux nombres sans le signe + ou - | Défi │ Solution |
Soustraire deux nombres sans le signe + ou - | Défi │ Solution |
Vérifier si un nombre est premier | Contribuer │ Contribuer |
Déterminer si deux droites sur un plan cartésien se coupent | Contribuer │ Contribuer |
En utilisant uniquement l'ajout, implémentez la multiplication, la soustraction et la division pour les entiers | Contribuer │ Contribuer |
Trouvez le kième nombre tel que les seuls facteurs premiers soient 3, 5 et 7 | Contribuer │ Contribuer |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnets statiques |
---|---|
Implémenter des opérations courantes de manipulation de bits | Défi │ Solution |
Déterminer le nombre de bits à retourner pour convertir a en b | Défi │ Solution |
Tracer une ligne sur un écran | Défi │ Solution |
Retournez un peu pour maximiser la plus longue séquence de 1 | Défi │ Solution |
Obtenez le prochain plus grand et le prochain plus petit nombre | Défi │ Solution |
Fusionner deux nombres binaires | Défi │ Solution |
Échangez les bits pairs et impairs dans un entier | Défi │ Solution |
Imprimer la représentation binaire d'un nombre compris entre 0 et 1 | Défi │ Solution |
Déterminer le nombre de 1 dans la représentation binaire d'un entier donné | Contribuer │ Contribuer |
Ajouter un défi | Contribuer │ Contribuer |
Défi | Carnets statiques |
---|---|
Trouver la sous-chaîne la plus longue avec au plus k caractères distincts | Défi │ Solution |
Trouver le produit le plus élevé de trois nombres | Défi │ Solution |
Maximisez le profit des actions à partir d’un achat et d’une vente | Défi │ Solution |
Déplacer tous les zéros d'une liste vers la fin | Défi │ Solution |
Retrouvez les produits de tous les autres | Défi │ Solution |
A partir d'une liste d'entrées et de sorties, trouvez la période la plus chargée | Défi │ Solution |
Déterminer le périmètre d'une île | Défi │ Solution |
Formater les clés de licence | Défi │ Solution |
Trouver le chemin de fichier absolu le plus long | Défi │ Solution |
Fusionner les plages de tuples | Défi │ Solution |
Attribuer des cookies | Défi │ Solution |
Déterminez si vous pouvez gagner à Nim | Défi │ Solution |
Vérifiez si un magazine aurait pu être utilisé pour créer une demande de rançon | Défi │ Solution |
Trouver le nombre de fois qu'une phrase peut tenir sur un écran | Défi │ Solution |
Arbre utopique | Défi │ Solution |
Maximiser xor | Défi │ Solution |
Ajouter un défi | Contribuer │ Contribuer |
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
│ │ └─ ...
│ ├─ ...
├─ ...
*Les notebooks (.ipynb) lisent/écrivent le fichier de test unitaire (.py) associé.
Ce README contient des liens vers Binder , qui héberge des blocs-notes dynamiques du contenu du dépôt en ligne sans aucune installation nécessaire.
Courir:
pip install jupyter
Pour obtenir des instructions détaillées, des scripts et des outils permettant de configurer de manière plus optimale votre environnement de développement, consultez le dépôt dev-setup.
Pour plus de détails sur l’installation du portable, suivez les instructions ici.
Plus d’informations sur les notebooks IPython/Jupyter peuvent être trouvées ici.
Les défis sont fournis sous la forme de notebooks IPython/Jupyter et ont été testés avec Python 2.7 et Python 3.x.
Si vous devez installer IPython/Jupyter Notebook, consultez la section Installation du notebook.
Exécutez le cahier des défis :
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
Cela lancera votre navigateur Web avec la liste des catégories de défis :
Pour déboguer votre solution avec pdb, reportez-vous au ticket suivant.
Remarque : Si votre solution est différente de celles répertoriées dans le Carnet de solutions, envisagez de soumettre une pull request afin que d'autres puissent bénéficier de votre travail. Consultez les directives de contribution pour plus de détails.
Les défis, les solutions et les tests unitaires sont présentés sous la forme de notebooks IPython/Jupyter .
Les contributions sont les bienvenues !
Consultez les directives de contribution pour plus de détails sur la façon de :
N'hésitez pas à me contacter pour discuter de tout problème, question ou commentaire.
Mes coordonnées se trouvent sur ma page GitHub.
Je vous fournis le code et les ressources de ce référentiel sous une licence open source. Puisqu'il s'agit de mon référentiel personnel, la licence que vous recevez pour mon code et mes ressources vient de moi et non de mon employeur (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.