C++ auf LeetCode: Wie man Aufgaben löst und seine Fähigkeiten verbessert

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum C++ die ideale Sprache für LeetCode ist (und wie man nicht scheitert)

\n\n

Wenn Sie LeetCode geöffnet und gedacht haben: „Ich schreibe einfach alles in Python, das ist prägnant“, – stopp. Für hartes Wachstum und ein echtes Verständnis von Algorithmen ist C++ jeder anderen Sprache überlegen. Warum? Weil es Sie zwingt, über Speicher, Geschwindigkeit und Implementierungsdetails nachzudenken. Kein „magisches“ sort() ohne zu verstehen, wie es funktioniert.

\n\n

In diesem Artikel listen wir nicht nur Aufgaben auf. Wir zeigen Ihnen, wie Sie in C++ bei der Lösung von LeetCode-Aufgaben denken, welche Datenstrukturen wirklich benötigt werden, und geben fertige Code-Vorlagen. Sie erfahren, warum std::vector Ihr bester Freund ist und std::unordered_map Ihre Geheimwaffe.

\n\n

Bereit? Los geht's.

\n\n

Die Top 5 C++-Datenstrukturen für LeetCode

\n\n

Bevor Sie sich auf die Aufgaben stürzen, müssen Sie Ihr „Arsenal“ zusammenstellen. Hier ist, was in 90% der Fälle wirklich nützlich ist:

\n\n
    \n
  • std::vector – dynamisches Array. Alles, was mit Sequenzen, Intervallen, Matrizen zu tun hat.
  • \n
  • std::unordered_map – Hash-Tabelle. Für Zählungen, Duplikatsuche, Zwei-Summen-Aufgaben.
  • \n
  • std::set / std::unordered_set – Mengen. Wenn Sie schnell das Vorhandensein eines Elements prüfen müssen.
  • \n
  • std::stack / std::queue / std::deque – für Traversierungen, Klammerausdrücke, BFS/DFS.
  • \n
  • std::pair – unverzichtbar zum Speichern von Paaren (z. B. Koordinaten + Wert).
  • \n
\n\n

Hier ist ein Beispiel, wie eine grundlegende Hülle für eine Häufigkeitsanalyse mit einer Hash-Tabelle aussieht:

\n\n
#include <unordered_map>\n#include <vector>\n#include <string>\n\nstd::unordered_map<std::string, int> countWords(const std::vector<std::string>& words) {\n    std::unordered_map<std::string, int> freq;\n    for (const auto& w : words) {\n        freq[w]++;\n    }\n    return freq;\n}\n
\n\n

Sehen Sie? Minimaler Code, maximaler Nutzen.

\n\n

Wie man an eine Aufgabe herangeht: Checkliste für C++

\n\n

Ein Anfängerfehler ist es, sofort Code zu schreiben. Der richtige Weg ist, zuerst die Datenstruktur zu verstehen. Für C++ ist das entscheidend, denn die falsche Wahl des Containers kann zu einem Time Limit Exceeded (TLE) führen.

\n\n

Schritt 1. Bestimmen Sie den Aufgabentyp

\n
    \n
  • Arrays / Zeichenketten → vector, string
  • \n
  • Duplikatsuche → unordered_set
  • \n
  • Dynamische Programmierung → vector<vector<int>>
  • \n
  • Graphen → vector<vector<int>> oder unordered_map<int, vector<int>>
  • \n
\n\n

Schritt 2. Wählen Sie die algorithmische Paradigma

\n
    \n
  • Gieriger Algorithmus – wenn es um Minimum/Maximum geht
  • \n
  • Binäre Suche – für sortierte Daten
  • \n
  • Zwei Zeiger – für Intervalle
  • \n
  • DFS/BFS – für Traversierungen
  • \n
\n\n

Schritt 3. Schreiben Sie das Grundgerüst

\n

Versuchen Sie nicht, sofort zu optimieren. Zuerst eine funktionierende Lösung, dann – Refactoring.

\n\n

Analyse einer echten Aufgabe: Two Sum (LeetCode #1)

\n\n

Ein Klassiker. Selbst wenn Sie sie schon gelöst haben, in C++ zeigt sie sich anders.

\n\n

Aufgabenstellung: Gegeben ist ein Array von ganzen Zahlen nums und eine ganze Zahl target. Geben Sie die Indizes der beiden Zahlen zurück, deren Summe target ergibt.

\n\n

Schlechte Lösung (O(n²)):

\n
std::vector<int> twoSum_brute(std::vector<int>& nums, int target) {\n    for (int i = 0; i < nums.size(); ++i) {\n        for (int j = i + 1; j < nums.size(); ++j) {\n            if (nums[i] + nums[j] == target) {\n                return {i, j};\n            }\n        }\n    }\n    return {};\n}\n
\n\n

Gute Lösung (O(n) mit unordered_map):

\n
#include <unordered_map>\n\nstd::vector<int> twoSum(std::vector<int>& nums, int target) {\n    std::unordered_map<int, int> seen; // Wert -> Index                

Blogs

Buchempfehlungen