Über 120 ständig aktualisierte, interaktive und testgetriebene Programmierherausforderungen mit Anki-Lernkarten.
Die Herausforderungen konzentrieren sich auf Algorithmen und Datenstrukturen , die bei der Codierung von Interviews zu finden sind.
Für jede Herausforderung gibt es eine oder mehrere Referenzlösungen:
Herausforderungen werden in Kürze auf Abruf inkrementelle Hinweise liefern, die Ihnen dabei helfen, die optimale Lösung zu finden.
Notizbücher enthalten außerdem Folgendes:
Ebenfalls enthalten sind Unit-getestete Referenzimplementierungen verschiedener Datenstrukturen und Algorithmen.
Das bereitgestellte Anki-Karteikartendeck verwendet räumliche Wiederholungen, um Ihnen dabei zu helfen, wichtige Konzepte im Gedächtnis zu behalten.
Ideal für unterwegs.
Suchen Sie nach Ressourcen, die Ihnen bei der Vorbereitung auf die Vorstellungsgespräche für Systemdesign und objektorientiertes Design helfen?
Schauen Sie sich das Schwester-Repo The System Design Primer an, das zusätzliche Anki-Decks enthält:
Für jede Herausforderung gibt es zwei Notizbücher: ein Herausforderungsnotizbuch mit Komponententests, die Sie lösen müssen, und ein Lösungsnotizbuch als Referenz.
Format : Herausforderungskategorie – Anzahl der Herausforderungen
Gesamtzahl der Herausforderungen: 120
Unit-getestete, voll funktionsfähige Implementierungen der folgenden Datenstrukturen:
Unit-getestete, voll funktionsfähige Implementierungen der folgenden Algorithmen:
Bildnachweise
Herausforderung | Statisches Notizbuch |
---|---|
Bestimmen Sie, ob eine Zeichenfolge eindeutige Zeichen enthält | Herausforderung │ Lösung |
Bestimmen Sie, ob eine Zeichenfolge eine Permutation einer anderen ist | Herausforderung │ Lösung |
Bestimmen Sie, ob eine Zeichenfolge eine Drehung einer anderen ist | Herausforderung │ Lösung |
Komprimieren Sie eine Zeichenfolge | Herausforderung │ Lösung |
Zeichen in einer Zeichenfolge umkehren | Herausforderung │ Lösung |
Finden Sie anhand zweier Zeichenfolgen das einzelne unterschiedliche Zeichen | Herausforderung │ Lösung |
Finden Sie zwei Indizes, deren Summe einen bestimmten Wert ergibt | Herausforderung │ Lösung |
Implementieren Sie eine Hash-Tabelle | Herausforderung │ Lösung |
Implementieren Sie Fizz Buzz | Herausforderung │ Lösung |
Suchen Sie das erste sich nicht wiederholende Zeichen in einer Zeichenfolge | Mitmachen │ Mitmachen |
Entfernen Sie die angegebenen Zeichen in einer Zeichenfolge | Mitmachen │ Mitmachen |
Wörter in einer Zeichenfolge umkehren | Mitmachen │ Mitmachen |
Konvertieren Sie eine Zeichenfolge in eine Ganzzahl | Mitmachen │ Mitmachen |
Konvertieren Sie eine Ganzzahl in eine Zeichenfolge | Mitmachen │ Mitmachen |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statisches Notizbuch |
---|---|
Entfernen Sie Duplikate aus einer verknüpften Liste | Herausforderung │ Lösung |
Finden Sie das k-te letzte Element einer verknüpften Liste | Herausforderung │ Lösung |
Löschen Sie einen Knoten in der Mitte einer verknüpften Liste | Herausforderung │ Lösung |
Partitionieren Sie eine verknüpfte Liste um einen bestimmten Wert | Herausforderung │ Lösung |
Fügen Sie zwei Zahlen hinzu, deren Ziffern in einer verknüpften Liste gespeichert sind | Herausforderung │ Lösung |
Finden Sie den Anfang einer verknüpften Listenschleife | Herausforderung │ Lösung |
Bestimmen Sie, ob eine verknüpfte Liste ein Palindrom ist | Herausforderung │ Lösung |
Implementieren Sie eine verknüpfte Liste | Herausforderung │ Lösung |
Bestimmen Sie, ob eine Liste zyklisch oder azyklisch ist | Mitmachen │ Mitmachen |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statisches Notizbuch |
---|---|
Implementieren Sie n Stapel mit einem einzelnen Array | Herausforderung │ Lösung |
Implementieren Sie einen Stapel, der sein minimales Element im Auge behält | Herausforderung │ Lösung |
Implementieren Sie eine Reihe von Stacks-Klassen, die eine Liste kapazitätsbegrenzter Stacks umschließen | Herausforderung │ Lösung |
Implementieren Sie eine Warteschlange mit zwei Stapeln | Herausforderung │ Lösung |
Sortieren Sie einen Stapel, indem Sie einen anderen Stapel als Puffer verwenden | Herausforderung │ Lösung |
Implementieren Sie einen Stapel | Herausforderung │ Lösung |
Implementieren Sie eine Warteschlange | Herausforderung │ Lösung |
Implementieren Sie eine Prioritätswarteschlange, die durch ein Array unterstützt wird | Herausforderung │ Lösung |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statische Notizbücher |
---|---|
Implementieren Sie eine Tiefensuche (vor, in, nach der Reihenfolge) in einem Baum | Herausforderung │ Lösung |
Implementieren Sie eine Breitensuche in einem Baum | Herausforderung │ Lösung |
Bestimmen Sie die Höhe eines Baumes | Herausforderung │ Lösung |
Erstellen Sie aus einem sortierten Array einen binären Suchbaum mit minimaler Höhe | Herausforderung │ Lösung |
Erstellen Sie eine verknüpfte Liste für jede Ebene eines Binärbaums | Herausforderung │ Lösung |
Überprüfen Sie, ob ein Binärbaum ausgeglichen ist | Herausforderung │ Lösung |
Bestimmen Sie, ob ein Baum ein gültiger binärer Suchbaum ist | Herausforderung │ Lösung |
Finden Sie den geordneten Nachfolger eines bestimmten Knotens in einem binären Suchbaum | Herausforderung │ Lösung |
Finden Sie den zweitgrößten Knoten in einem binären Suchbaum | Herausforderung │ Lösung |
Finden Sie den niedrigsten gemeinsamen Vorfahren | Herausforderung │ Lösung |
Invertieren Sie einen Binärbaum | Herausforderung │ Lösung |
Implementieren Sie einen binären Suchbaum | Herausforderung │ Lösung |
Implementieren Sie einen minimalen Heap | Herausforderung │ Lösung |
Führen Sie einen Versuch durch | Herausforderung │ Lösung |
Implementieren Sie die Tiefensuche in einem Diagramm | Herausforderung │ Lösung |
Implementieren Sie eine Breitensuche in einem Diagramm | Herausforderung │ Lösung |
Bestimmen Sie, ob es einen Pfad zwischen zwei Knoten in einem Diagramm gibt | Herausforderung │ Lösung |
Implementieren Sie ein Diagramm | Herausforderung │ Lösung |
Suchen Sie anhand einer Liste von Projekten und Abhängigkeiten nach einem Build-Auftrag. | Herausforderung │ Lösung |
Finden Sie den kürzesten Weg in einem gewichteten Diagramm. | Herausforderung │ Lösung |
Finden Sie den kürzesten Weg in einem ungewichteten Diagramm. | Herausforderung │ Lösung |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statische Notizbücher |
---|---|
Implementieren Sie die Auswahlsortierung | Herausforderung │ Lösung |
Implementieren Sie die Einfügungssortierung | Herausforderung │ Lösung |
Implementieren Sie eine schnelle Sortierung | Herausforderung │ Lösung |
Implementieren Sie die Zusammenführungssortierung | Herausforderung │ Lösung |
Implementieren Sie die Basissortierung | Herausforderung │ Lösung |
Sortieren Sie ein Array von Zeichenfolgen, sodass alle Anagramme nebeneinander liegen | Herausforderung │ Lösung |
Suchen Sie ein Element in einem sortierten, gedrehten Array | Herausforderung │ Lösung |
Durchsuchen Sie eine sortierte Matrix nach einem Element | Herausforderung │ Lösung |
Finden Sie ein int, das nicht in einer Eingabe von n ganzen Zahlen enthalten ist | Herausforderung │ Lösung |
Füge bei gegebenen sortierten Arrays A, B B in sortierter Reihenfolge mit A zusammen | Herausforderung │ Lösung |
Implementieren Sie eine stabile Auswahlsortierung | Mitmachen │ Mitmachen |
Machen Sie eine instabile Sorte stabil | Mitmachen │ Mitmachen |
Implementieren Sie eine effiziente In-Place-Version von Quicksort | Mitmachen │ Mitmachen |
Führen Sie bei gegebenen zwei sortierten Arrays eines in sortierter Reihenfolge miteinander zusammen | Mitmachen │ Mitmachen |
Suchen Sie ein Element in einem gedrehten und sortierten Array von Ganzzahlen | Mitmachen │ Mitmachen |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statische Notizbücher |
---|---|
Implementieren Sie Fibonacci rekursiv, dynamisch und iterativ | Herausforderung │ Lösung |
Maximieren Sie die Menge an Gegenständen, die Sie in einen Rucksack stecken | Herausforderung │ Lösung |
Maximieren Sie die unbegrenzte Anzahl an Gegenständen, die in einem Rucksack untergebracht sind | Herausforderung │ Lösung |
Finden Sie die längste gemeinsame Teilfolge | Herausforderung │ Lösung |
Finden Sie die am längsten ansteigende Teilfolge | Herausforderung │ Lösung |
Minimieren Sie die Kosten der Matrixmultiplikation | Herausforderung │ Lösung |
Maximieren Sie die Aktienkurse bei gegebenen k Transaktionen | Herausforderung │ Lösung |
Finden Sie die minimale Anzahl an Darstellungsmöglichkeiten für n Cent bei einer gegebenen Anzahl von Münzen | Herausforderung │ Lösung |
Finden Sie die eindeutige Anzahl von Möglichkeiten, n Cent bei einer Reihe von Münzen darzustellen | Herausforderung │ Lösung |
Gibt alle gültigen Kombinationen von n-Klammerpaaren aus | Herausforderung │ Lösung |
Navigieren Sie durch ein Labyrinth | Herausforderung │ Lösung |
Alle Teilmengen einer Menge drucken | Herausforderung │ Lösung |
Gibt alle Permutationen einer Zeichenfolge aus | Herausforderung │ Lösung |
Finden Sie den magischen Index in einem Array | Herausforderung │ Lösung |
Finden Sie die Anzahl der Möglichkeiten, n Schritte hochzulaufen | Herausforderung │ Lösung |
Realisieren Sie die Türme von Hanoi mit 3 Türmen und N Scheiben | Herausforderung │ Lösung |
Implementieren Sie die Fakultät rekursiv, dynamisch und iterativ | Mitmachen │ Mitmachen |
Führen Sie eine binäre Suche für ein sortiertes Array von Ganzzahlen durch | Mitmachen │ Mitmachen |
Gibt alle Kombinationen einer Zeichenfolge aus | Mitmachen │ Mitmachen |
Implementieren Sie eine Farbfüllfunktion | Mitmachen │ Mitmachen |
Finden Sie alle Permutationen zur Darstellung von n Cent bei gegebenen 1-, 5-, 10- und 25-Cent-Münzen | Mitmachen │ Mitmachen |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statische Notizbücher |
---|---|
Erzeugen Sie eine Liste von Primzahlen | Herausforderung │ Lösung |
Finden Sie die digitale Wurzel | Herausforderung │ Lösung |
Erstellen Sie eine Klasse, die insert, max, min, mean, mode in O(1) unterstützt. | Herausforderung │ Lösung |
Bestimmen Sie, ob eine Zahl eine Zweierpotenz ist | Herausforderung │ Lösung |
Addieren Sie zwei Zahlen ohne das + oder – Zeichen | Herausforderung │ Lösung |
Subtrahieren Sie zwei Zahlen ohne das + oder – Zeichen | Herausforderung │ Lösung |
Überprüfen Sie, ob eine Zahl eine Primzahl ist | Mitmachen │ Mitmachen |
Bestimmen Sie, ob sich zwei Linien auf einer kartesischen Ebene schneiden | Mitmachen │ Mitmachen |
Verwenden Sie nur Addition, implementieren Sie Multiplikation, Subtraktion und Division für Ganzzahlen | Mitmachen │ Mitmachen |
Finden Sie die k-te Zahl, sodass die einzigen Primfaktoren 3, 5 und 7 sind | Mitmachen │ Mitmachen |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statische Notizbücher |
---|---|
Implementieren Sie gängige Bitmanipulationsoperationen | Herausforderung │ Lösung |
Bestimmen Sie die Anzahl der umzudrehenden Bits, um a in b umzuwandeln | Herausforderung │ Lösung |
Zeichnen Sie eine Linie auf einem Bildschirm | Herausforderung │ Lösung |
Drehen Sie ein wenig um, um die längste Folge von Einsen zu maximieren | Herausforderung │ Lösung |
Ermitteln Sie die nächstgrößere und nächstkleinere Zahl | Herausforderung │ Lösung |
Füge zwei Binärzahlen zusammen | Herausforderung │ Lösung |
Vertauschen Sie ungerade und gerade Bits in einer Ganzzahl | Herausforderung │ Lösung |
Drucken Sie die binäre Darstellung einer Zahl zwischen 0 und 1 | Herausforderung │ Lösung |
Bestimmen Sie die Anzahl der Einsen in der binären Darstellung einer gegebenen ganzen Zahl | Mitmachen │ Mitmachen |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
Herausforderung | Statische Notizbücher |
---|---|
Finden Sie die längste Teilzeichenfolge mit höchstens k unterschiedlichen Zeichen | Herausforderung │ Lösung |
Finden Sie das höchste Produkt aus drei Zahlen | Herausforderung │ Lösung |
Maximieren Sie den Aktiengewinn aus 1 Kauf und 1 Verkauf | Herausforderung │ Lösung |
Alle Nullen in einer Liste an das Ende verschieben | Herausforderung │ Lösung |
Finden Sie die Produkte aller anderen int | Herausforderung │ Lösung |
Finden Sie anhand einer Liste von Ein- und Ausgängen die geschäftigste Zeit | Herausforderung │ Lösung |
Bestimmen Sie den Umfang einer Insel | Herausforderung │ Lösung |
Lizenzschlüssel formatieren | Herausforderung │ Lösung |
Finden Sie den längsten absoluten Dateipfad | Herausforderung │ Lösung |
Tupelbereiche zusammenführen | Herausforderung │ Lösung |
Cookies zuweisen | Herausforderung │ Lösung |
Finden Sie heraus, ob Sie in Nim gewinnen können | Herausforderung │ Lösung |
Überprüfen Sie, ob eine Zeitschrift zur Erstellung eines Erpresserbriefs hätte verwendet werden können | Herausforderung │ Lösung |
Finden Sie heraus, wie oft ein Satz auf einen Bildschirm passt | Herausforderung │ Lösung |
Utopischer Baum | Herausforderung │ Lösung |
xor maximieren | Herausforderung │ Lösung |
Fügen Sie eine Herausforderung hinzu | Mitmachen │ Mitmachen |
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
│ │ └─ ...
│ ├─ ...
├─ ...
*Die Notebooks (.ipynb) lesen/schreiben die zugehörige Unit-Test-Datei (.py).
Diese README-Datei enthält Links zu Binder , der dynamische Notizbücher mit den Inhalten des Repos online hostet, ohne dass eine Installation erforderlich ist.
Laufen:
pip install jupyter
Ausführliche Anweisungen, Skripte und Tools zum optimalen Einrichten Ihrer Entwicklungsumgebung finden Sie im Dev-Setup-Repo.
Weitere Informationen zur Notebook-Installation finden Sie hier.
Weitere Informationen zu IPython/Jupyter-Notebooks finden Sie hier.
Die Herausforderungen werden in Form von IPython/Jupyter-Notebooks bereitgestellt und mit Python 2.7 und Python 3.x getestet .
Wenn Sie IPython/Jupyter Notebook installieren müssen, lesen Sie den Abschnitt „Notebook-Installation“.
Führen Sie das Notizbuch der Herausforderungen aus:
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
Dadurch wird Ihr Webbrowser mit der Liste der Herausforderungskategorien gestartet:
Informationen zum Debuggen Ihrer Lösung mit pdb finden Sie im folgenden Ticket.
Hinweis: Wenn sich Ihre Lösung von den im Lösungsnotizbuch aufgeführten unterscheidet, sollten Sie erwägen, eine Pull-Anfrage einzureichen, damit andere von Ihrer Arbeit profitieren können. Weitere Informationen finden Sie in den Beitragsrichtlinien.
Herausforderungen, Lösungen und Unit-Tests werden in Form von IPython/Jupyter-Notebooks präsentiert.
Beiträge sind willkommen!
Sehen Sie sich die Beitragsrichtlinien an, um Einzelheiten dazu zu erfahren:
Sie können mich gerne kontaktieren, um Probleme, Fragen oder Kommentare zu besprechen.
Meine Kontaktinformationen finden Sie auf meiner GitHub-Seite.
Ich stelle Ihnen Code und Ressourcen in diesem Repository unter einer Open-Source-Lizenz zur Verfügung. Da es sich um mein persönliches Repository handelt, stammt die Lizenz, die Sie für meinen Code und meine Ressourcen erhalten, von mir und nicht von meinem Arbeitgeber (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.