algorithms_and_data_structures
1.0.0
Aktueller Status | Statistiken |
---|---|
Gesamte C++-Probleme | 188 |
Totale Python-Probleme | 15 |
Aktueller Tagesstreik | 11 |
Letzter Streik | 20.06.2019 - 21.06.2019 |
Aktueller Streak | 23.06.2019 - 03.07.2019 |
Hinweis: Ein Teil des Codes hier ist alt und wurde geschrieben, als ich C++ lernte. Möglicherweise ist der Code nicht sicher oder geht von falschen Annahmen aus. Bitte mit Vorsicht verwenden. Pull-Anfragen sind jederzeit willkommen.
Problem | Lösung |
---|---|
Suchen Sie den n-ten Knoten der verknüpften Liste vom letzten. | nthToLastNode.cpp, nth_to_last_node.py |
Fügen Sie Zahlen hinzu, wobei jede Ziffer der Zahl durch einen Knoten einer verknüpften Liste dargestellt wird. Geben Sie die Ausgabe als verknüpfte Liste aus. | add_two_numbers_lists.cpp, add_two_numbers_list.py |
Tauschen Sie Knoten einer verknüpften Liste aus, ohne Daten auszutauschen. | swapNodesWithoutSwappingData.cpp, swap_nodes_without_swapping_data.py |
Kehren Sie eine verknüpfte Liste iterativ und rekursiv um | reverseLinkedListIterAndRecurse.cpp, reverse_linkedlist.py |
Bei einer gegebenen verknüpften Liste werden alternative Knoten umgedreht und am Ende angehängt. | reverseAlternateNodes.cpp |
Nur wenn ein Knotenzeiger vorhanden ist, löschen Sie den Knoten aus der verknüpften Liste. | deleteNode.cpp |
Löschen Sie die gesamte verknüpfte Liste. | deleteLinkedlist.cpp |
Drucken Sie den mittleren Knoten der verknüpften Liste, ohne zweimal zu iterieren. | printMiddleNode.cpp |
Bestimmen Sie, ob eine verknüpfte Liste ein Pallindrom ist. | listPallindrome.cpp |
Fügen Sie Daten in eine sortierte verknüpfte Liste ein. | insertInASortedLinkedList.cpp |
Bestimmen Sie den Schnittpunkt (Zusammenführungspunkt) zweier gegebener verknüpfter Listen. | findIntersectionPointOfLists.cpp, Kreuzung_of_lists.py |
Klonen Sie eine verknüpfte Liste, die next und einen zufälligen Zeiger, Space Complexity – O(1), hat. | cloneListWithRandomPtr.cpp, clone_list_with_random_ptr.py |
Entfernen Sie bei einer sortierten verknüpften Liste mit Duplikaten Duplikate in einer Iteration. | RemoveDuplicatesFromSortedList.cpp |
Erkennen Sie mithilfe des Floyd-Zyklussuchalgorithmus, ob eine verknüpfte Liste einen Zyklus enthält. Wenn sie einen Zyklus enthält, entfernen Sie die Schleife | floyedCycleDetection.cpp |
Sortieren Sie eine verknüpfte Liste mithilfe der Zusammenführungssortierung | merge_sort.cpp |
Gegeben sei eine einfach verknüpfte Liste L 0 -> L 1 -> … -> L n-1 -> L n . Ordnen Sie die Knoten in der Liste (an Ort und Stelle) neu an, sodass die neu gebildete Liste wie folgt lautet: L 0 -> L n -> L 1 -> L n-1 -> L 2 -> L n-2 .... | Rearrange_list.cpp |
Include enthält eine Single-Header-Implementierung von Datenstrukturen und einigen Algorithmen.
Datenstruktur/Algorithmus | Durchführung |
---|---|
Generische Makros und Algorithmen wie Swap, Zufallszahlengenerierung | generisch.h |
Generische Stack-Implementierung | stack.h |
Generische Warteschlangenimplementierung | queue.h |
Generische Listenimplementierung | list.h |
Implementierung eines binären Suchbaums | BinarySearchTree.h |
Schnelle Sortierimplementierung | quickSort.h |
Implementierung der Zusammenführungssortierung | mergeSort.h |
Implementierung der Auswahlsortierung | SelectionSort.h |
Implementierung der Blasensortierung | bubbleSort.h |
Linux-Kernel-Double-LinkedList-Implementierung | double_linked_list.h |
Generische Graph-Implementierung (Adjazenzliste) | graph.h |
Implementierung der Heap-Sortierung | heap_sort.h |
Meine eigene String-Bibliotheksimplementierung | pstring.h pstring.cpp |
Problem | Lösung |
---|---|
Bestimmen Sie, ob eine Zahl eine Zweierpotenz ist. | power_of_2.cpp |
Fügen Sie zwei Binärzahlen hinzu, die als Zeichenfolge dargestellt werden. | addBin.cpp |
Bestimmen Sie die nächste Potenz von 2 für eine gegebene Zahl. | next_power_of_2.cpp |
Bestimmen Sie mithilfe der Bitmanipulation, ob eine Zahl ein Vielfaches von 3 ist. | multiple_of_3.cpp |
Bestimmen Sie die Endianess der Maschine und geben Sie eine Zahl in umgekehrter Endianess aus. | reverseEndianness.cpp |
Finden Sie die Parität der gegebenen Zahl. | find_parity.cpp |
Implementieren Sie mithilfe der Bitmanipulation eine schnelle Multiplikation einer Zahl mit 7. | multiply_by_7.cpp |
Bits einer vorzeichenlosen Ganzzahl umkehren (zwei Methoden – Stück für Stück umkehren und dividieren und erobern). | reverseBitsOfAnInteger.cpp |
Kleine Funktion zur Bestimmung der Position des am weitesten rechts gesetzten Bits in einer bestimmten Ganzzahl. | right_most_set_bit.cpp |
Bei einem gegebenen Zahlenvektor kommt nur eine Zahl ungerade oft vor. Finden Sie die Zahl. | find_odd_one_out.cpp |
Bestimmen Sie anhand zweier Ganzzahlen, ob ihre Summe einen Ganzzahlüberlauf ergeben würde. | integerOverflow.cpp |
Wie viele Bit-Flip-Operationen wären erforderlich, um die Zahl A in B umzuwandeln? | countNumberOfBitFlips.cpp |
Schreiben Sie bei einer gegebenen Zahl x und zwei Positionen (von der rechten Seite) in der Binärdarstellung von x eine Funktion, die n rechte Bits an bestimmten zwei Positionen vertauscht und das Ergebnis zurückgibt. Es ist auch gegeben, dass sich die beiden Bitsätze nicht überlappen. | swapSetOfBits.cpp |
Addieren Sie zwei Zahlen, ohne arithmetische Operatoren zu verwenden | Addition_without_operators.cpp |
Louise und Richard spielen ein Spiel. Sie haben einen Zähler auf N. Louise ist zuerst an der Reihe und die Züge wechseln sich danach ab. Im Spiel führen sie die folgenden Operationen aus:
| counter_game.cpp |
Bestimmen Sie, ob zwei ganze Zahlen entgegengesetzte Vorzeichen haben. | check_oposite_signs.cpp |
Vertauschen Sie zwei Bits an den Positionen p und q einer gegebenen Ganzzahl. | swapBits.cpp |
Überprüfen Sie, ob eine Zahl eine Potenz von 4 ist. | check_if_power_of_4.cpp |
Problem | Lösung |
---|---|
Problem 1-1: Ausgabe 6: Schreiben Sie einen Algorithmus, um zu bestimmen, ob eine Zeichenfolge eindeutige Zeichen enthält oder nicht. Können wir das tun, ohne zusätzliche Datenstrukturen zu verwenden? | 1-1-hasUniqueChars.cpp, 1-1-hasUniqueChars.py |
Problem 1-2: Edition 5: Kehren Sie einen String um, wenn Sie einen nullterminierten C-String übergeben. | 1-2-edi5-reverseString.cpp |
Problem 1-2: Ausgabe 6: Bestimmen Sie anhand zweier Zeichenfolgen, ob eine eine Permutation der anderen ist. | 1-2-perm-strings.cpp, 1-2-perm-strings.py |
Problem 1-3: Ausgabe 5: Schreiben Sie einen Algorithmus, um doppelte Zeichen aus einer Zeichenfolge zu entfernen. | 1-3-edi5-removeDuplicates.cpp |
Problem 1-3: Edition 6: URLify: Ersetzen Sie alle Leerzeichen in einer Zeichenfolge durch „%20“. Vorzugsweise Inplace | 1-3-URLify.cpp |
Problem 1-4: Ausgabe 6: Schreiben Sie bei gegebener Zeichenfolge eine Funktion, um zu prüfen, ob es sich um eine Permutation eines Pallindroms handelt. | 1-4-pallindrome-permutations.cpp |
Problem 1-5: Ausgabe 6: Es gibt drei mögliche Bearbeitungen, die an einer Zeichenfolge durchgeführt werden können: Einfügen eines Zeichens, Löschen eines Zeichens, Ersetzen eines Zeichens. Bestimmen Sie anhand zweier Zeichenfolgen, ob es sich um eine oder um eine Bearbeitung handelt. | 1-5-one-edit-away.cpp |
Problem 1-6: Implementieren Sie eine Methode zur Durchführung einer grundlegenden String-Komprimierung. Die Beispielzeichenfolge aabcccccaaa sollte zu a2b1c5a3 komprimiert werden. Wenn die komprimierte Zeichenfolge jedoch größer als die ursprüngliche Zeichenfolge ist, wird die ursprüngliche Zeichenfolge zurückgegeben | 1-6-string-compression.cpp |
Aufgabe 1-7: Drehen Sie die Matrix im Uhrzeigersinn (und gegen den Uhrzeigersinn) um 90 Grad | 1-7-matrix-rotation.cpp |
Aufgabe 1-8: Schreiben Sie einen Algorithmus so, dass, wenn ein Element der MxN-Matrix 0 ist, seine gesamte Zeile und Spalte auf 0 gesetzt wird. | 1-8-null-matrix.cpp |
Problem 1-9: Bestimmen Sie bei gegebenen zwei Zeichenfolgen s1 und s2, dass s2 die Drehung von s1 ist, indem Sie nur einen Aufruf einer Funktion durchführen, die prüft, ob eine Zeichenfolge eine Drehung einer anderen ist. | 1-9-Saitenrotation.cpp |
Problem 2-1: Duplikate aus einer unsortierten verknüpften Liste entfernen. Was passiert, wenn kein temporärer Puffer zulässig ist? | 2-1-remove-dups.cpp |
Aufgabe 2-2: Bestimmen Sie den k -ten Knoten aus dem letzten einer einfach verknüpften Liste. (Iterative und rekursive Ansätze) | 2-2-kthToLast.cpp |
Problem 2-3: Implementieren Sie einen Algorithmus zum Löschen eines Knotens in der Mitte einer einfach verknüpften Liste | 2-3-delete-middle-node.cpp |
Problem 2-4: Partitionieren Sie eine verknüpfte Liste um einen Wert x. Alle Knoten, die kleiner als x sind, kommen vor allen Knoten, die größer als gleich x sind | 2-4-partition.cpp |
Problem 2-5: Sie haben zwei Zahlen, die durch eine verknüpfte Liste dargestellt werden, wobei jeder Knoten eine einzelne Ziffer enthält. Die Ziffern werden in umgekehrter Reihenfolge gespeichert, sodass die Ziffern der Eins am Anfang der Liste stehen. Schreiben Sie eine Funktion, die die beiden Zahlen addiert und die Summe als verknüpfte Liste zurückgibt.Beispiel:
| 2-5-add-lists.cpp |
Problem 2-6: Bestimmen Sie, ob die verknüpfte Liste ein Palindrom ist (2 iterative und ein rekursiver Ansatz). | 2-6-palindrome.cpp |
Aufgabe 2-7: Bestimmen Sie, ob sich zwei einfach verknüpfte Listen überschneiden. Wenn ja, geben Sie den Schnittpunkt zurück. Der Schnittpunkt wird anhand von Referenzen und nicht anhand von Werten definiert | 2-7-kreuzung.cpp |
Problem 2-8: Ermitteln Sie, ob die verknüpfte Liste eine Schleife enthält. Suchen Sie den Startknoten der Schleife und entfernen Sie die Schleife | 2-8-Loop-Detection.cpp |
Problem | Lösung |
---|---|
N- ter Fibonacci-Begriff unter Verwendung verschiedener Memoisierungstechniken | fibonacci.cpp |
Längstes gemeinsames Folgeproblem | lcs.cpp, longest_common_subsequence.py |
Wiki zum Problem der zusammenhängenden Folgefolgen mit maximalem Wert | max_subsequence.cpp |
Katalanische Zahl – Zählen Sie die Anzahl möglicher binärer Suchbäume mit n Schlüsseln | catalan_number.cpp |
Berechnen Sie die Anzahl der eindeutigen Pfade vom Quellursprung (0, 0) zum Ziel (m-1, n-1) im amxn-Raster. Sie können sich nur entweder nach unten oder nach rechts bewegen. | unique_paths.cpp |
0-1 Rucksackproblem: Stellen Sie sich vor, Sie sind ein Dieb und möchten Dinge stehlen, während der Raum voller Dinge ist. Sie haben einen Rucksack, der die maximale Kapazität des Gewichts W fasst, und Sie möchten ihn so füllen, dass sein Wert maximal ist. Als intelligenter Dieb kennen Sie Gewicht und Wert aller Gegenstände im Raum. Wie würden Sie Ihren Rucksack so füllen, dass Sie den maximal möglichen Wert erhalten, sodass Sie ihn nur bis zum Fassungsvermögen W füllen können? | 0_1_knapsack_problem.cpp |
Problem | Lösung |
---|---|
Iterative Level-Reihenfolgedurchquerung des Baums mithilfe einer Warteschlange | levelOrderTraversalIterative.cpp, level_order_tree_traversal_iterative.py |
Rekursive Ebenenreihenfolge des Baums | levelOrderTraversalRecursive.cpp, level_order_tree_traversal_recursive.py |
Zick-Zack-Durchquerung des Baums | zigZagTraversal.cpp, zig_zag_traversal.py |
Vorgänger und Nachfolger eines bestimmten Knotens im binären Suchbaum | previousSuccessor.cpp |
Finden Sie bei gegebenen Werten von zwei Knoten in einem binären Suchbaum den niedrigsten gemeinsamen Vorfahren (LCA). Gehen Sie davon aus, dass beide Werte im Baum vorhanden sind. | niedrigster-gemeinsamer-Vorfahre.cpp, niedrigster_gemeinsamer-Vorfahre.py |
Finden Sie bei einem gegebenen Binärbaum (im Gegensatz zum binären Suchbaum) den Lowest Common Ancestor (LCA). | lowest-common-ancestor-binary-tree.cpp |
Geben Sie bei einem gegebenen Binärbaum alle seine Wurzel-zu-Blatt-Pfade einzeln pro Zeile aus. | printAllRootToLeafPath.cpp |
Bestimmen Sie, ob ein Baum ein Summenbaum ist. Ein SumTree ist ein Binärbaum, bei dem der Wert eines Knotens der Summe der Knoten entspricht, die in seinem linken und rechten Teilbaum vorhanden sind. Ein leerer Baum ist SumTree und die Summe eines leeren Baums kann als 0 betrachtet werden. Ein Blattknoten wird auch als SumTree betrachtet. | sumTree.cpp |
Konvertieren Sie einen Baum in sumTree, sodass jeder Knoten die Summe des linken und rechten Teilbaums des ursprünglichen Baums ist. | Convert_to_sum_tree.cpp, Convert_to_sum_tree.py |
Konvertieren Sie ein sortiertes Array in einen ausgeglichenen binären Suchbaum. | sortedArrayToBST.cpp |
Generieren Sie bei einem gegebenen Binärbaum die Summe jeder vertikalen Spalte. | VerticalSum.cpp |
Bei gegebenem Binärbaum und Schlüssel existiert im Baum ein Knoten mit Schlüssel. Finden Sie alle Vorfahren des Knotens mit dem Schlüssel. Vorfahren sind hier die Knoten, die sich auf einem geraden Weg vom Knoten zur Wurzel befinden. | node_ancestors_in_root_path.cpp |
Geben Sie bei gegebenem Binärbaum und Schlüssel die Ebene des Knotens mit Schlüssel zurück. Root befindet sich auf Ebene 1, und wenn kein Knoten mit Schlüssel im Baum vorhanden ist, wird 0 zurückgegeben | level_of_node.cpp |
Finden Sie bei einem gegebenen Binärbaum alle Pfade von der Wurzel zu den Knoten, deren Summe k ist. | k_sum_paths.cpp |
Geben Sie bei einem gegebenen Binärbaum seine Knoten Ebene für Ebene in umgekehrter Reihenfolge aus. Das heißt, alle auf der letzten Ebene vorhandenen Knoten sollten zuerst gedruckt werden, gefolgt von den Knoten der vorletzten Ebene usw. Alle Knoten für jede Ebene sollten von links nach rechts gedruckt werden. | reverseLevelOrderTraversal.cpp |
Invertieren Sie einen Binärbaum rekursiv und iterativ. | invert_a_tree.cpp |
Finden Sie in einem gegebenen binären Suchbaum die Decke und den Boden eines bestimmten Schlüssels. Wenn der angegebene Schlüssel im BST liegt, sind sowohl Boden als auch Decke gleich diesem Schlüssel, andernfalls ist Decke gleich dem nächstgrößeren Schlüssel (falls vorhanden) im BST und Boden ist gleich dem vorherigen größeren Schlüssel (falls vorhanden) im BST | floor_ceil_bst.cpp |
Finden Sie das k-kleinste Element in einem binären Suchbaum | kth_smallest.cpp |
Überprüfen Sie, ob ein gegebener Binärbaum ein binärer Suchbaum ist. | validieren_bst.cpp |
Geben Sie bei einem gegebenen binären Suchbaum und einer Zielzahl „true“ zurück, wenn im BST zwei Elemente vorhanden sind, deren Summe dem angegebenen Ziel entspricht. | find_target_k.cpp |
Suchen Sie bei einem nicht leeren binären Suchbaum und einem Zielwert den Wert im BST, der dem Ziel am nächsten liegt. Beachten Sie außerdem, dass der Zielwert ein Gleitkommawert ist. Es wird nur einen eindeutigen Wert geben, der dem Ziel am nächsten kommt. | nächster_bst_value.cpp, nächster_bst_value.py |
Erstellen Sie anhand eines Binärbaums, der die Vorbestellung durchläuft, eine Zeichenfolgenausgabe mit Knotenwerten und Klammern. Der Nullknoten muss durch ein leeres Klammerpaar „()“ dargestellt werden. Und Sie müssen alle leeren Klammerpaare weglassen, die keinen Einfluss auf die Eins-zu-Eins-Zuordnungsbeziehung zwischen der Zeichenfolge und dem ursprünglichen Binärbaum haben. Beispiele in der Codedatei | string_from_tree.cpp |
Problem | Lösung |
---|---|
Implementierung des Robin-Karp-Algorithmus für die String-Suche | robinKarpStringMatching.cpp |
Finden Sie die nächste Permutation einer gegebenen Zeichenfolge, d. h. Ordnen Sie die angegebene Zeichenfolge so um, dass sie lexikografisch nächst größer ist als die angegebene Zeichenfolge | next_permutation.cpp |
Implementierung des Z-Algorithmus für den Mustervergleich | z.cpp |
Testfälle für selbst erstellte String-Bibliothek | pstring_test.cpp |
Ermitteln Sie die Länge des letzten Wortes in einer Zeichenfolge. | length_of_last_word.cpp |
Finden Sie den Unterschied zwischen zwei Zeichenfolgen. Die Zeichenfolge t wird durch zufälliges Mischen der Zeichenfolge s generiert und fügt dann an einer zufälligen Position einen weiteren Buchstaben hinzu. Bestimmen Sie den Charakter, der in t unterschiedlich ist | find_difference.cpp |
Problem | Lösung |
---|---|
Drucken Sie den Inhalt der Matrix spiralförmig aus | matrix_spiral_print.cpp |
Drehen Sie eine gegebene M x N-Matrix um R Drehungen gegen den Uhrzeigersinn und zeigen Sie die resultierende Matrix an. | rotate_matrix.cpp |
Drehen Sie ein Array um r Elemente (nach links oder rechts). | array_rotation.cpp |
Bestimmen Sie anhand eines Arrays sich wiederholender/nicht wiederholender Ganzzahlen den ersten sich nicht wiederholenden Ganzzahlwert in diesem Array | first_non_repeating_int.cpp |
Im Quantumland gibt es n Städte, die von 1 bis n nummeriert sind. Hier bezeichnet c i die i -te Stadt. Es gibt n−1 Straßen im Quantumland. Hier haben c i und c i+1 für jedes i < n eine bidirektionale Straße zwischen sich. Es gibt ein Gerücht, dass Flatland Quantumland angreifen wird und die Königin ihr Land schützen möchte. Die Straße zwischen c i und c i+1 ist sicher, wenn sich in c i oder c i+1 eine Wache befindet. Die Königin hat in einigen Städten bereits einige Wachen aufgestellt, ist sich jedoch nicht sicher, ob diese ausreichen, um die Straßen sicher zu halten. Sie möchte wissen, wie viele neue Wachen sie mindestens einstellen muss. Einzelheiten zur Eingabe/Ausgabe finden Sie in den Kommentaren in der Lösung. | save_quantamland.cpp |
Sie erhalten eine ganze Zahl N. Suchen Sie die Ziffern dieser Zahl, die genau N teilen (Division, bei der 0 als Rest verbleibt), und zeigen Sie deren Anzahl an. Für N=24 gibt es 2 Ziffern (2 und 4). Beide Ziffern teilen genau 24. Unsere Antwort lautet also 2. Weitere Details finden Sie im Kopfkommentar der Lösungsdatei. | findDigits.cpp |
Verschlüsseln und entschlüsseln Sie einen Text anschließend mit Caeser Cipher. | caeser_cipher.cpp |
Verschlüsselt und entschlüsselt einen Text anschließend mit der Vigenère-Verschlüsselung. | vigenere_cipher.cpp |
Generieren Sie effizient Binärzahlen zwischen 1 und N. | n_binary.cpp |
Potenzfunktion implementieren | power_function.cpp |
Problem | Lösung |
---|---|
Gibt alle Permutationen einer Zeichenfolge aus. Beispiel: Permutationen von ABC sind ABC, ACB, BCA, BAC, CAB, CBA | string_permutations.cpp |
Euklidischer Algorithmus zur Ermittlung des größten gemeinsamen Teilers zweier Zahlen. (Iterativ und rekursiv) | gcd.cpp |
Implementieren Sie pow(x,y) mit dem Divide-and-Conquer-Ansatz. Versuchen Sie es in O(logn) zu implementieren. | pow.cpp |
Berechnen Sie die Fakultät einer großen Zahl, sagen wir 100 (sie wird 158 Ziffern haben) | factial_of_large_num.cpp |
Generieren Sie alle möglichen Wörter aus einer auf einer herkömmlichen mobilen Tastatur eingegebenen Zahl | phone_digits.cpp |
Entfernen Sie bei einer gegebenen Zeichenfolgendarstellung einer Zahl n Zeichen aus der Zeichenfolge, sodass die Zahlendarstellung möglichst niedrig ist. | niedrigste_mögliche_Nummer.cpp |
Erkennen Sie, ob eine Zahl eine Glückszahl ist. Eine Zahl ist eine glückliche Zahl, wenn eine Folge von Operationen, bei denen die Zahl durch die Quadratsumme ihrer Ziffern ersetzt wird, schließlich zu 1 führt. Eine Zahl ist keine glückliche Zahl, wenn wir uns bei der Ausführung der oben genannten Operationen in einer Endlosschleife befinden. | happy_number.cpp |
Problem | Lösung |
---|---|
Wir haben eine Reihe von n täglichen Kursnotierungen für eine Aktie. Wir müssen die Spanne des Aktienkurses für alle n Tage berechnen. Die Spanne für den i-ten Tag ist definiert als die maximale Anzahl aufeinanderfolgender Tage, an denen der Aktienkurs kleiner oder gleich dem i-ten Tag war. Für Aktienkurse {100, 60, 70, 65, 80, 85} beträgt die Spanne {1, 1, 2, 1, 4, 5}. Die Spanne für Tag 1 ist immer 1, jetzt für Tag 2 liegt der Bestand bei 60, und es gibt keinen Tag davor, an dem der Bestand weniger als 60 betrug. Die Spanne bleibt also 1. Für Tag 3 liegt der Preis der Aktie bei 70, also ihre Spanne ist 2, wie am Vortag waren es 60 und so weiter. | stock_span_problem.cpp |
Konvertieren Sie einen gegebenen Infix-Ausdruck in einen Postfix-Ausdruck, Beispiel (A+B)*C --> AB+C* | infix_to_postfix.cpp |
Bestimmen Sie anhand einer Zeichenfolge, die nur die Zeichen „(“, „)“, „{“, „}“, „[“ und „]“ enthält, ob die Eingabezeichenfolge gültig ist. Die Klammern müssen in der richtigen Reihenfolge geschlossen werden: „( )“ und „()[]{}“ sind alle gültig, „(]“ und „([)]“ jedoch nicht. | valid_parenthesis.cpp |
Problem | Lösung |
---|---|
Bei einem gegebenen sortierten Vektor wird der erste Index des Vorkommens eines Werts im Vektor zurückgegeben. Wenn keine Zahl vorhanden ist, wird -1 zurückgegeben | first_occurrence_binary_search.cpp |
Suchen Sie das erste sich wiederholende Element in einem Array von Ganzzahlen. Suchen Sie bei einem gegebenen Array von ganzen Zahlen das erste sich wiederholende Element darin. Wir müssen das Element finden, das mehr als einmal vorkommt und dessen Index des ersten Vorkommens am kleinsten ist. | firstRepeatingElement.cpp |
Gegeben eine Liste unsortierter Ganzzahlen, A={a 1 ,a 2 ,…,a N }, Finden Sie das Elementpaar, das den kleinsten absoluten Unterschied zwischen ihnen aufweist? Wenn es mehrere Paare gibt, suchen Sie alle. | close_numbers.cpp |
Bestimmen Sie anhand eines sortierten Arrays den Index des Festpunkts in diesem Array. Wenn das Array keinen Festkommawert hat, geben Sie -1 zurück. Ein Array hat einen festen Punkt, wenn der Index des Elements mit dem Index übereinstimmt, d. h. i == arr[i], erwartete Zeitkomplexität O(logn) | FixedPoint.cpp |
Finden Sie das maximale Element in einem Array, das zuerst zunimmt und dann abnimmt. Eingabe: arr[] = {8, 10, 20, 80, 100, 200, 400, 500, 3, 2, 1}, Ausgabe: 500. Das Array kann auch streng steigend oder fallend sein. Die ExpectedTime-Komplexität beträgt O(logn). | findMaximum.cpp |
Suchen Sie bei einem gegebenen Array positiver und/oder negativer Ganzzahlen ein Paar im Array, dessen Summe am nächsten bei 0 liegt. | findClosestPairToZero.cpp |
Numeros, der Künstler, hatte zwei Listen A und B, sodass B eine Permutation von A war. Numeros war sehr stolz auf diese Listen. Leider wurden beim Transport von einer Ausstellung zur anderen einige Nummern in A weggelassen. Können Sie die fehlenden Nummern finden? Hinweise:
| fehltNumbers.cpp |
Finden Sie das nächstgelegene Paar aus zwei sortierten Arrays. Finden Sie bei zwei sortierten Arrays und einer Zahl x das Paar, dessen Summe x am nächsten kommt und das Paar ein Element aus jedem Array enthält. Wir erhalten zwei Arrays ar1[0…m-1] und ar2[0..n-1] und eine Zahl x. Wir müssen das Paar ar1[i] + ar2[j] finden, sodass der absolute Wert von (ar1 [i] + ar2[j] – x) ist minimal. | closePairSorted.cpp |
Finden Sie für ein gegebenes Array A mit n Elementen drei Indizes i, j und k, sodass A[i]^2 + A[j]^2 = A[K]^2 ist. O(n2) Zeitkomplexität und O(1) Raumkomplexität | quadratsumme.cpp |
Finden Sie bei einem unsortierten Array arr[0..n-1] der Größe n das Subarray arr[s..e] mit der minimalen Länge, sodass durch Sortieren dieses Subarrays das gesamte Array sortiert wird. | minLengthUnsortedArray.cpp |
Finden Sie die fehlende Zahl in der arithmetischen Progression | fehlendeNummer2.cpp |
Finden Sie die gemeinsamen Elemente in 3 sortierten Vektoren | commonIn3Arrays.cpp |
Finden Sie alle Paare mit einer bestimmten Summe in einem unsortierten Array/Vektor | find_pairs_with_sum.cpp |
Finden Sie in einem gegebenen Array das Peak-Element darin. Ein Spitzenelement ist ein Element, das größer als seine Nachbarn ist. | Peak_element.cpp |
Finden Sie in einem gegebenen sortierten Array unterschiedlicher nicht negativer Ganzzahlen das kleinste fehlende Element darin. | small_missing.cpp |
Verschiebe alle Nullen im Vektor ans Ende | move_zeros.cpp |
Problem | Lösung |
---|---|
Tiefendurchlauf eines Graphen | dfsDemo.cpp |
Breiten-erste Durchquerung eines Graphen | bfsDemo.cpp |
Berechnen Sie mithilfe des Dijkstra-Algorithmus den kürzesten Abstand von der Startposition (Knoten S) zu allen anderen Knoten im Diagramm. | dijkstra-shortest-reach.cpp |
Berechnen Sie das Gesamtgewicht des Minimum Spanning Tree eines bestimmten Diagramms (Summe der Gewichte der Kanten, die MST bilden) mithilfe des Prim-Algorithmus | primsMST.cpp |
Drucken Sie den Minimum Spanning Tree (MST) eines bestimmten Diagramms mithilfe des Kruskal-Algorithmus. | kruskalMST.cpp |
Erstellen Sie ein Programm, um für jedes Zeichen eine Huffman-Codierung als Tabelle zu generieren. | huffman_encoding.cpp |
Suchen Sie ein bestimmtes Wort in einer 2D-Tafel mit Buchstaben. Das Wort kann durch sequentielles Durchlaufen benachbarter horizontaler oder vertikaler Zellen gebildet werden. In einer Reihenfolge, in der ein Wort gebildet wird, dürfen Buchstaben an derselben Position nicht mehr als einmal verwendet werden. (Beispiele finden Sie oben in der Datei.) | grid_word_search.cpp |
Ersetzen Sie bei einem 2D-Bildschirm, der Position des Pixels und dem neuen Wert der zu füllenden Farbe die Farbe des Pixels und aller angrenzenden (oben, unten, links, rechts) gleichfarbigen Pixel durch eine neue Farbe. Dies entspricht dem Überfluten (denken Sie an das Eimersymbol) eines Bereichs in MS-PAINT. | Flood_fill.cpp |
Problem | Lösung |
---|---|
Gegeben sind zwei ganzzahlige Arrays A und B, die jeweils N ganze Zahlen enthalten. Sie können die Reihenfolge der Elemente in den Arrays frei ändern. Ist eine Permutation A', B' von A und B möglich, so dass A' i + B' i ≥ K für alle i, wobei A' i das i -te Element im Array A' und B' i bezeichnet i- tes Element im Array B'. | two_arrays.cpp |
John nimmt Befehle entgegen. Die i -te Bestellung wird vom i -ten Kunden zum richtigen Zeitpunkt aufgegeben und die Bearbeitung dauert d i Zeit. In welcher Reihenfolge erhalten die Kunden ihre Bestellungen? (Weitere Details finden Sie in den Kommentaren der Lösungen.) | orders_order.cpp |
Problem | Lösung |
---|---|
Sie erhalten eine Ziffernfolge (z. B. „1234“, „567“ usw.) und geben alle möglichen Buchstabenkombinationen an, die wir aus dieser Ziffernfolge generieren könnten, basierend auf der Zuordnung, die wir auf der Telefon-/Mobiltelefon-Wähltastatur sehen. Wenn Sie SMS in alten Telefonen eingegeben haben, wissen Sie es. Beispielsweise wird „1“ auf „abc“ abgebildet, 2 wird auf „def“ abgebildet. Sie können sich auf das Bild beziehen.
| dialpad_combinations.cpp |
Implementieren Sie die Bearbeitung von Platzhaltermustern mit Unterstützung für „?“ & ' '.
| wild_card_matching.cpp |
Suchen Sie anhand einer 2D-Tafel und einer Wortliste aus einem Wörterbuch alle möglichen Wörter auf der Tafel aus der Liste. (Überprüfen Sie das Beispiel in der Lösung) | word_search.cpp |
Problem | Lösung |
---|---|
Geben Sie bei einem gegebenen sortierten Integer-Array ohne Duplikate die Zusammenfassung seiner Bereiche zurück. Wenn beispielsweise [0,1,2,4,5,7] gegeben ist, wird [„0->2“, „4->5“, „7“] zurückgegeben. | summary_ranges.cpp |
Gegeben sei eine 2D-Matrix mit folgenden Eigenschaften
| search2DII.cpp |
Suchen Sie anhand eines unsortierten Ganzzahlarrays die erste fehlende positive Ganzzahl. Beispiel: [1,2,0] sollte 3 und [3,4,-1,1] sollte 2 zurückgeben. Erwartete Zeitkomplexität O(n) und Lösung sollten Verwenden Sie konstanten Platz | firstMissingPositiveNum.cpp |
Ermitteln Sie anhand eines unsortierten Arrays von Ganzzahlen die Länge der längsten Folge aufeinanderfolgender Elemente. Zum Beispiel: Gegeben [100, 4, 200, 1, 3, 2]. Die längste Folge aufeinanderfolgender Elemente ist [1, 2, 3, 4]. Gibt seine Länge zurück: 4. Der Algorithmus sollte in O(n)-Komplexität ausgeführt werden. | longestConsecutiveSeq.cpp |
Wenn Sie zwei sortierte Ganzzahl-Arrays nums1 und nums2 haben, führen Sie nums2 in nums1 als ein sortiertes Array zusammen. Sie können davon ausgehen, dass nums1 über genügend Platz (Größe größer oder gleich m + n) verfügt, um zusätzliche Elemente aus nums2 aufzunehmen. Die Anzahl der in nums1 und nums2 initialisierten Elemente beträgt m bzw. n. | mergeArrays.cpp |
Bei einem Array nicht negativer Ganzzahlen befinden Sie sich zunächst am ersten Index des Arrays. Jedes Element im Array repräsentiert Ihre maximale Sprunglänge an dieser Position. Stellen Sie fest, ob Sie den letzten Index erreichen können. Zum Beispiel:
| jumpGame.cpp |
Geben Sie bei einer positiven Ganzzahl den entsprechenden Spaltentitel zurück, wie er in einer Excel-Tabelle angezeigt wird. Zum Beispiel 1 -> A, 2 -> B,...26 -> Z, 27 -> AA, 28 -> AB, ...705 -> AAC | excelColSheetTitle.cpp |
Schreiben Sie bei gegebenen Array-Nummern eine Funktion, um alle Nullen an das Ende zu verschieben und dabei die relative Reihenfolge der Nicht-Null-Elemente beizubehalten. Wenn beispielsweise „nums“ = [0, 1, 0, 3, 12] ist, sollten „nums“ nach dem Aufruf Ihrer Funktion [1, 3, 12, 0, 0] sein. | moveZeroes.cpp |
Finden Sie bei einem gegebenen Array von Ganzzahlen heraus, ob das Array Duplikate enthält. Die Funktion sollte „true“ zurückgeben, wenn ein Wert mindestens zweimal im Array vorkommt, und sie sollte „false“ zurückgeben, wenn jedes Element eindeutig ist. | enthältDuplicate.cpp |
Drehen Sie bei einer gegebenen Liste die Liste um k Stellen nach rechts, wobei k nicht negativ ist. Zum Beispiel:
| rotateList.cpp |
Ermitteln Sie anhand zweier Wörter, Wort1 und Wort2, die Mindestanzahl an Schritten, die erforderlich sind, um Wort1 in Wort2 umzuwandeln. (Jeder Vorgang wird als 1 Schritt gezählt.) Für ein Wort sind folgende 3 Operationen zulässig:
| editDistance.cpp |
Füllen Sie bei einem gegebenen Binärbaum jeden nächsten Zeiger so, dass er auf den nächsten rechten Knoten zeigt. Wenn es keinen nächsten rechten Knoten gibt, sollte der nächste Zeiger auf NULL gesetzt werden. Anfänglich werden alle nächsten Zeiger auf NULL gesetzt. Sie dürfen nur konstanten zusätzlichen Speicherplatz verwenden. Sie können davon ausgehen, dass es sich um einen perfekten Binärbaum handelt (dh alle Blätter befinden sich auf derselben Ebene und jedes Elternteil hat zwei Kinder). | connectNextPointers.cpp |
Schreiben Sie bei gegebenen n Klammerpaaren eine Funktion, um alle Kombinationen wohlgeformter Klammern zu generieren. Bei n = 3 ist beispielsweise eine Lösungsmenge „((()))“, „(()())“, „(())()“, „()(())“, „( )()()" | generate_parenthesis.cpp |
Suchen Sie bei einem gegebenen Array mit n verschiedenen Zahlen aus 0, 1, 2, ..., n die Zahl, die im Array fehlt. Beispiel: Gegebene Zahlen = [0, 1, 3] geben 2 zurück. | fehlende_Nummer.cpp |
Angenommen, ein sortiertes Array wird an einem Drehpunkt gedreht, der Ihnen vorher unbekannt ist. (dh aus 0 1 2 4 5 6 7 könnte 4 5 6 7 0 1 2 werden). Finden Sie das minimale Element. Sie können davon ausgehen, dass im Array kein Duplikat vorhanden ist. | find_min_rotated.cpp |
Finden Sie bei einem gegebenen Array S mit n ganzen Zahlen drei ganze Zahlen in S, sodass die Summe einer gegebenen Zahl, Ziel, am nächsten kommt. Gibt die Summe der drei ganzen Zahlen zurück. Sie können davon ausgehen, dass jede Eingabe genau eine Lösung hätte. | threeSumClosest.cpp |
Gegeben sind n nichtnegative ganze Zahlen a 1 , a 2 , ..., a n , wobei jede einen Punkt an der Koordinate (i, a i ) darstellt. Es werden n vertikale Linien so gezeichnet, dass die beiden Endpunkte der Linie i bei (i, a i ) und (i, 0) liegen. Finden Sie zwei Linien, die zusammen mit der x-Achse einen Behälter bilden, sodass der Behälter das meiste Wasser enthält. Hinweis: Der Behälter darf nicht geneigt werden. | maxArea.cpp |
Bei einem Binärbaum, der nur Ziffern von 0 bis 9 enthält, könnte jeder Pfad von der Wurzel zum Blatt eine Zahl darstellen. Ein Beispiel ist der Wurzel-zu-Blatt-Pfad 1->2->3, der die Zahl 123 darstellt. Ermitteln Sie die Gesamtsumme aller Wurzel-zu-Blatt-Zahlen. Beispiel in Lösungskommentaren | sumRootToLeafNumbers.cpp |
Angenommen, Sie haben ein Array, dessen i-tes Element der Preis einer bestimmten Aktie am Tag i ist. Wenn Sie nur höchstens eine Transaktion durchführen dürften (also eine Aktie kaufen und eine Aktie verkaufen), entwerfen Sie einen Algorithmus, um den maximalen Gewinn zu ermitteln. | maxProfitStock.cpp |
Finden Sie bei einem mit nichtnegativen Zahlen gefüllten amxn-Gitter einen Pfad von links oben nach rechts unten, der die Summe aller Zahlen entlang seines Pfads minimiert. Hinweis: Sie können sich zu jedem Zeitpunkt nur entweder nach unten oder nach rechts bewegen. | minPath.cpp |
Zählen Sie die Anzahl der Primzahlen, die kleiner als eine nicht negative Zahl sind, n. | countPrimes.cpp |
Finden Sie alle möglichen Kombinationen von k Zahlen, die zusammen eine Zahl n ergeben, vorausgesetzt, dass nur Zahlen von 1 bis 9 verwendet werden können und jede Kombination eine eindeutige Zahlenmenge sein sollte. Stellen Sie sicher, dass die Zahlen innerhalb des Satzes in aufsteigender Reihenfolge sortiert sind. Beispiel: Für k = 3, n = 9 wäre das Ergebnis [[1,2,6], [1,3,5], [2,3,4]], ähnlich wäre für k = 3, n = 7 das Ergebnis wäre [[1,2,4]]. | KombinationSum3.cpp |
Addieren Sie bei einer nicht negativen Ganzzahl wiederholt alle Ziffern, bis das Ergebnis nur noch eine Ziffer enthält. Beispiel: Bei gegebener Zahl = 38 ist der Prozess wie folgt: 3 + 8 = 11, 1 + 1 = 2. Da 2 nur eine Ziffer hat, geben Sie diese zurück. Follow-up: Könnten Sie es ohne Schleife/Rekursion in der O(1)-Laufzeit tun? | addDigits.cpp |
Gegeben sei eine Matrix mit den Zellenwerten 0 oder 1. Ermitteln Sie die Länge des kürzesten Pfads von (a1, b1) nach (a2, b2), so dass der Pfad nur durch Zellen mit dem Wert 1 konstruiert werden kann und Sie nur in 4 reisen können mögliche Richtungen, also links, rechts, oben und unten. | kürzester_pfad_labyrinth.cpp |
Der Hamming-Abstand zwischen zwei ganzen Zahlen ist die Anzahl der Positionen, an denen die entsprechenden Bits unterschiedlich sind. Berechnen Sie bei zwei gegebenen ganzen Zahlen x und y die Hamming-Distanz. | hamming_distance.cpp |
Stellen Sie sich zwei binäre Bäume vor und stellen Sie sich vor, dass sich einige Knoten der beiden Bäume überlappen, wenn Sie einen davon über den anderen legen, während dies bei den anderen nicht der Fall ist. Sie müssen sie in einem neuen Binärbaum zusammenführen. Die Zusammenführungsregel besagt, dass bei Überlappung zweier Knoten die Knotenwerte als neuer Wert des zusammengeführten Knotens addiert werden. Andernfalls wird der NOT-Null-Knoten als Knoten des neuen Baums verwendet. | merge_trees.cpp |
Schreiben Sie eine Funktion, die eine Zeichenfolge als Eingabe verwendet und nur die Vokale einer Zeichenfolge umkehrt. | reverse_vowels.cpp |
Sortieren Sie eine gegebene Zeichenfolge in absteigender Reihenfolge basierend auf der Häufigkeit der Zeichen. Beispiel:
| sortCharByFrequency.cpp |
Produkt von Array außer Self. Bei einem gegebenen Array von n Ganzzahlen mit n > 1, nums, wird eine Array-Ausgabe zurückgegeben, sodass Ausgabe[i] gleich dem Produkt aller Elemente von nums außer nums[i] ist. | product_exclusive_self.cpp |
Entfernen Sie bei einem sortierten Array vorhandene Duplikate und geben Sie die neue Länge zurück. Es spielt keine Rolle, was sich im Array über die Größe der eindeutigen Elemente hinaus befindet. Erwartete O(1)-Raum- und O(n)-Zeitkomplexität. | remove_duplicates.cpp |
Zählen Sie die Anzahl der Inseln in einem Raster. Bestimmen Sie anhand eines Gitters, das 1 als Landkörper und 0 als Wasserkörper darstellt, die Anzahl der Inseln (weitere Einzelheiten in den Problemkommentaren). | count_islands.cpp |
Finden Sie den Median aus einem Datenstrom. Entwerfen Sie eine Datenstruktur, die addNum unterstützt, um dem Stream eine Zahl hinzuzufügen, und findMedian, um den Median der bisher gesehenen aktuellen Zahlen zurückzugeben. Wenn die Anzahl der Zahlen gerade ist, wird außerdem der Durchschnitt zweier mittlerer Elemente zurückgegeben, andernfalls der Median. | median_stream.cpp |
Entfernen Sie die Mindestanzahl ungültiger Klammern, um die Eingabezeichenfolge gültig zu machen. Gibt alle möglichen Ergebnisse zurück. Hinweis: Die Eingangszeichenfolge kann andere Buchstaben als die Klammern enthalten (und) | remove_invalid_parenthesis.cpp |
Entfernen Sie bei einem Array und eines Werts alle Instanzen dieses Wertes an Ort und geben die neue Länge zurück. Zuleiten Sie keinen zusätzlichen Platz für ein anderes Array. Die Reihenfolge der Elemente kann geändert werden. Es spielt keine Rolle, was Sie über die neue Länge hinaus verlassen. | remove_element.cpp |
Finden Sie den Schnittpunkt von zwei Arrays/Vektoren, da zwei Vektoren das Ergebnis ihrer Wechselwirkung finden. Das Ergebnis sollte nur einzigartige Zeichen enthalten und kann in beliebiger Reihenfolge sein | intersection_of_array.cpp |
Finden Sie bei einem Muster und einer String -STR, wenn Str dem gleiche Muster folgt. Hier bedeutet folgt eine vollständige Übereinstimmung, so dass eine Bijection zwischen einem Buchstaben im Muster und einem nicht leeren Wort in str. Beispiel: | |
muster = "abba", str = "Dog Cat Cat Dog" sollte wahr zurückkehren. | |
muster = "abba", str = "Hundekatkatze" sollte falsch zurückkehren. | |
muster = "aaaa", str = "Dog Cat Cat Cat Dog" sollte falsch zurückkehren. | |
muster = "abba", str = "Hundehundhund" sollte falsch zurückkehren. | word_pattern.cpp |
Sie erhalten einen Zahlenvektor, bei dem jede Zahl darstellt | |
Preis einer Aktie am Tag. Wenn Sie nur fertig werden dürfen | |
Eine Transaktion pro Tag (dh kaufen eine und verkaufe eine Aktie), Design | |
Ein Algorithmus, um den maximalen Gewinn zu finden. | Best_time_to_buy_sell.cpp |
Geben Sie bei einem Satz die Reihenfolge der Zeichen in jedem Wort in einem Satz um und erhalten Sie dennoch die Weiße und die anfängliche Wortreihenfolge. | |
Beispiel: | |
Eingabe: Sie liebt Schokolade | |
Ausgang: EHS Sevol EtalocoHC | Reverse_words.cpp |