Option
Heim
Nachricht
Was ist Arrayverschachtelung in LeetCode? Ein 2025 DFS-Leitfaden für optimale Lösungen.

Was ist Arrayverschachtelung in LeetCode? Ein 2025 DFS-Leitfaden für optimale Lösungen.

29. November 2025
141

Die Verschachtelung von Arrays mag auf den ersten Blick komplex erscheinen, aber mit der richtigen Strategie wird sie zu einer faszinierenden Herausforderung. In diesem Leitfaden wird das LeetCode-Problem 565, Array-Schachtelung, gründlich untersucht und es wird umfassend erläutert, wie man es mit der Depth-First-Suche (DFS) lösen kann. Wir gehen die Problembeschreibung durch, erklären, warum DFS eine effektive Methode ist, schlüsseln den Algorithmus auf, liefern detaillierte Codebeispiele und diskutieren Optimierungstaktiken. Am Ende werden Sie über ein solides Verständnis der Array-Schachtelung und der DFS verfügen, so dass Sie mit ähnlichen Problemen sicher umgehen können.

Wichtigste Punkte

Verstehen Sie die Problemstellung der Arrayverschachtelung auf LeetCode (Problem 565).

Lernen Sie, warum die Depth-First Search (DFS) gut geeignet ist, um Zyklen in Arrays zu identifizieren.

Zerlegen Sie den DFS-Algorithmus in klare, überschaubare Schritte.

Überprüfen Sie Code-Implementierungen in Java und Python.

Analysieren Sie Überlegungen zur Zeit- und Raumkomplexität.

Entdecken Sie Optimierungsmethoden, wie z. B. die Verwendung eines besuchten Arrays.

Folgen Sie einem Schritt-für-Schritt-Beispiel, um Ihr Verständnis zu vertiefen.

Verständnis der Array-Verschachtelung

Problemstellung: LeetCode 565

Beginnen wir mit einer formalen Definition des Problems. Sie erhalten ein Array 'nums' mit 'n' ganzen Zahlen, wobei jeder Wert 'nums[i]' in den Bereich [0, n - 1] fällt. Diese Matrix stellt eine Permutation der Zahlen von 0 bis n-1 dar. Ihr Ziel ist es, die Länge der längsten Menge (oder des längsten Zyklus) zu bestimmen, die durch die Befolgung dieser Folge gebildet wird:

  1. Beginnen Sie bei einem beliebigen Index 'i'.
  2. Das nächste Element der Menge ist "nums[i]".
  3. Das darauf folgende Element ist 'nums[nums[i]]', und dieses Muster wird fortgesetzt.
  4. Dieser Prozess wird so lange fortgesetzt, bis ein Element erreicht wird, das bereits in der aktuellen Menge vorkommt.

Das Ziel ist es, die Länge der größten gefundenen Menge innerhalb des Arrays zu ermitteln. Diese Aufgabe testet Ihre Fähigkeit, in Array-Strukturen zu navigieren und zyklische Muster zu erkennen.

Warum die Tiefensuche (Depth-First Search, DFS) eine gute Lösung ist

Depth-First Search (DFS) ist eine intuitive und effektive Strategie für Probleme, die die Erkennung von Zyklen beinhalten. Sie können sich das Array als einen gerichteten Graphen vorstellen, bei dem jeder Index zu einem anderen Index führt. DFS ist geschickt darin, solche Graphen systematisch zu erforschen, indem es jeden Zweig so weit wie möglich durchläuft, bevor es zurückverfolgt wird. Hier sind die Hauptgründe, warum es für die Verschachtelung von Arrays gut funktioniert:

  • Systematische Erkundung: DFS erforscht jeden potenziellen Pfad gründlich, bevor es zum nächsten übergeht, und gewährleistet so die vollständige Durchquerung aller Zyklen.
  • Erkennung von Zyklen: Wenn Sie während der Durchquerung auf einen Knoten stoßen, der bereits auf dem aktuellen Pfad besucht wurde, haben Sie erfolgreich einen Zyklus identifiziert. Die Verfolgung der besuchten Knoten ist dafür unerlässlich.
  • Effizienz: Durch die Markierung von Knoten als besucht werden redundante Berechnungen vermieden, wodurch die Gesamtlösung optimiert wird.

Alternative Lösungen

Alternative 1: Iterative Implementierung von DFS

Dieser iterative Ansatz für die Depth-First Search bietet eine Alternative zur Rekursion. Der folgende Java-Code erkennt Zyklen und berechnet ihre Länge ohne Rekursion, wodurch potenzielle Stapelüberlaufprobleme vermieden werden:

import java.util.Arrays;class Solution {public int arrayNesting(int[] nums) {int n = nums.length;boolean[] visited = new boolean[n];int maxLength = 0;for (int start = 0; start

Die wichtigsten Vorteile dieser Implementierung sind:

  • Stack Overflow Prevention:
  • Eine iterative Schleife ersetzt die Rekursion und beseitigt so die Probleme mit der Stapeltiefe.
  • Visited Array:
  • Es wird weiterhin ein separates Array verwendet, um effizient zu verfolgen, welche Elemente verarbeitet wurden.
  • Speichereffizienz:
  • Durch die Iteration wird der mit rekursiven Aufrufstapeln verbundene Speicher-Overhead reduziert.

Alternative 2: Berechnung der Zykluslänge an Ort und StelleDiese

Methode bietet eine speichereffizientere Lösung, da die Zykluslänge direkt im Eingabe-Array berechnet wird.

Der folgende Python-Code demonstriert diesen In-Place-Ansatz:

class Solution:def arrayNesting(self, nums: List[int]) -> int:n = len(nums)max_length = 0for i in range(n):if nums[i] != -1:# Nur fortfahren, wenn dieser Index noch nicht verarbeitet wurdestart = icount = 0while nums[start] != -1:next_index = nums[start]nums[start] = -1# Markieren als besucht durch Setzen auf -1start = next_indexcount += 1max_length = max(max_length, count)return max_length# Beispiel Usagenums = [5,4,0,3,1,6,2]solution = Solution()result = solution.arrayNesting(nums)print(f "Länge des längsten Zyklus: {result}") # Output:

4Die wichtigsten

Vorteile dieses Ansatzes sind:

  • Geringerer Speicherbedarf:
  • Durch die Änderung der ursprünglichen Liste entfällt die Notwendigkeit eines separaten besuchten Arrays:
  • Die besuchten Elemente werden direkt im Eingabe-Array markiert.
  • Optimierte Leistung:
  • Diese Methode minimiert die Speicherzuweisung und die Zugriffsoperationen.

DFS-Algorithmus:

Schritt-für-Schritt-ImplementierungBesuchtes

Array

Wir verwenden ein boolesches Array namens "visited", das die gleiche Länge wie das Array "nums" hat. Der Wert visited[i] wird auf true gesetzt, sobald wir das Element mit dem Index 'i' in einem beliebigen Zyklus untersucht haben.

Die DFS-Funktion (dfs(nums, i, visited))

Diese rekursive Funktion akzeptiert das Array 'nums', einen Startindex 'i' und das Array 'visited'.

Sie führt eine Tiefensuche durch, beginnend beim Index 'i', und gibt die Länge des gefundenen

  1. Zyklus

zurück.

  1. Die Funktion gibt 0 zurück, um redundante Arbeit zu vermeiden.

  1. Mark as Visited:

  2. Wir markieren visited[i] sofort als wahr, um zu verhindern, dass derselbe Zyklus von einem anderen Ausgangspunkt aus erneut betreten wird.

  3. Rekursive Untersuchung:

  4. Wir bestimmen den nächsten Index mit next = nums[i] und führen dann einen rekursiven Aufruf von dfs(nums, next, visited) durch, um den Zyklus weiter zu erkunden.

  5. Berechne die Zykluslänge: Die Gesamtlänge des Zyklus ist 1 (für den aktuellen Knoten) plus die vom rekursiven Aufruf zurückgegebene Länge.

  1. Dieser Wert wird dann zurückgegeben.cycle_length = 1 + dfs(nums, next, visited).

The Main Function (arrayNesting(nums))

  1. Initialisieren Sie das Array "visited":
  2. Erstellen Sie ein boolesches Array der Größe n und setzen Sie alle Werte auf false.
  3. Initialisieren Sie 'maxLength' auf 0: Diese Variable wird den längsten gefundenen Zyklus verfolgen.
  4. Iterieren Sie durch jeden Index:
  5. Schleife durch jeden Index 'i' im Array 'nums'.
  6. Prüfen, ob visited:
  7. Wenn visited[i] falsch ist, wird ein DFS-Traversal von diesem Index aus gestartet.
  8. Update 'maxLength':
  9. Vergleiche die Länge des gefundenen Zyklus mit der aktuellen maxLength und aktualisiere sie, wenn die neue Länge größer ist. max_length = Math.max(max_length, dfs(nums, i, visited)).
  10. Return 'maxLength':
  1. Nach der Verarbeitung aller Indizes wird der endgültige Wert von maxLength zurückgegeben.

pricingtitlepricingVorteile

und Nachteile des

DFS-AnsatzesPros

Effektive Zykluserkennung:

Hervorragend geeignet zum Auffinden von Zyklen in graphenähnlichen Strukturen wie diesem Array.

Systematisches Traversieren:

Garantiert, dass jeder potenzielle Pfad und Zyklus vollständig erforscht wird.

Klare rekursive Struktur: Die rekursive Struktur bietet einen geradlinigen, logischen Ablauf für die Lösung des Problems.

NachteilePotenzial

für Stack Overflow:

Bei sehr großen Eingaben kann eine tiefe Rekursion zu Stack Overflow-Fehlern führen.

Platzbedarf:

Erfordert zusätzlichen Speicher für das besuchte Array und den Rekursionsstapel, was den Platzbedarf erhöht.

Hauptmerkmale und Vorteile der Verwendung von DFS für die

Array-VerschachtelungSchlüsselcodekonzepte und ihre BedeutungDie

DFS-Implementierung zur Lösung des Array-Verschachtelungsproblems umfasst mehrere wichtige Programmierkonzepte, die zu ihrem Erfolg beitragen:

  • Rekursion:
  • Die rekursive Natur von DFS ermöglicht es, jeden potenziellen Pfad im Array vollständig zu untersuchen, um sicherzustellen, dass kein Zyklus übersehen wird.
  • Boolesches besuchtes Array:
  • Dieses Array ist von grundlegender Bedeutung für die Effizienz, da es den Algorithmus daran hindert, jedes Element mehr als einmal zu verarbeiten.
  • Logik der Zykluserkennung:
  • Der Algorithmus erkennt von sich aus einen Zyklus, wenn er versucht, einen Knoten zu besuchen, der bereits Teil des aktuellen Traversalpfads ist:
  • Die Länge jedes Zyklus wird während des Durchlaufs des DFS durch das Array berechnet.
  • Maximierungsschritt:
  • Durch die kontinuierliche Aktualisierung der Maximallänge wird sichergestellt, dass die endgültige Antwort der größte gefundene Zyklus ist.

Verbessertes Verständnis durch Code-BeispielZur

Veranschaulichung des DFS-Prozesses betrachten wir das folgende Beispiel:

Bei dem Array nums = [5,4,0,3,1,6,2] würde der DFS-Algorithmus wie folgt ablaufen:

  1. Beginnend bei Index 0 markiert er Index 0 als besucht und geht zum Wert bei nums[0], also 5.
  2. Ab Index 5 markiert er Index 5 als besucht und geht zu nums[5], was 6 ist.
  3. Ab Index 6 markiert er Index 6 als besucht und geht zu nums[6], was 2 ist.
  4. Bei Index 2 markiert der Algorithmus diesen als besucht und stellt fest, dass nums[2] 0 ist. Da 0 bereits besucht wurde, ist der Zyklus [0, 5, 6, 2] mit einer Länge von 4 vollständig.

Der Algorithmus identifiziert dies korrekt als den längsten

Zyklus

.

Durch diese tiefe Erkundung ist es naheliegend zu erkennen, wenn ein Pfad zu einem zuvor besuchten Knoten zurückführt und einen Zyklus bildet. Breadth-First Search (BFS) eignet sich besser für die Suche nach kürzesten Pfaden und ist für diese spezielle Aufgabe weniger intuitiv.

Kann dieses Problem ohne zusätzlichen Platzbedarf gelöst werden?

Ja, eine O(1)-Lösung ist möglich, indem das ursprüngliche Eingabe-Array geändert wird. Anstelle eines separaten "visited"-Arrays kann man besuchte Indizes direkt im "nums"-Array markieren, indem man ihre Werte in einen Sentinel-Wert wie -1 ändert. Es ist wichtig zu beachten, dass dieser Ansatz die ursprünglichen Eingabedaten verändert.

Welchen Einfluss hat der Zahlenbereich im Array (0 bis n-1) auf die Lösung?

Die Einschränkung, dass alle Werte zwischen 0 und n-1 liegen, ist entscheidend. Sie garantiert, dass jeder Wert in der Matrix ein gültiger Index innerhalb der Matrix selbst ist.

Diese Eigenschaft macht das Zykluserkennungsproblem wohldefiniert und mit Graphentraversaltechniken wie DFS lösbar.

Verwandte Fragen

Können Sie eine Funktion schreiben, die den längsten Zyklus im Array findet und zurückgibt, wenn ein Array nums aus n ganzen Zahlen besteht und nums[i] im Bereich [0, n - 1] liegt?

Geben Sie sowohl eine Java- als auch eine Python-Implementierung an.

Sicher. Hier sind Implementierungen in Java und Python, um die längste Zykluslänge zu finden:import java.util.Arrays;class Solution {public int arrayNesting(int[] nums) {int n = nums.length;boolean[] visited = new boolean[n];int maxLength = 0;for (int i = 0; i int:n = len(nums)visited = [False] * nmax_length = 0for i in range(n):if not visited[i]:max_length = max(max_length, self.dfs(nums, i, visited))return max_lengthdef dfs(self, nums: List[int], start: int, visited: List[bool]) -> int:if visited[start]:return 0visited[start] = Truenext_val = nums[start]cycle_length = 1 + self.dfs(nums, next_val, visited)return cycle_length# Beispiel Usagenums = [5,4,0,3,1,6,2]solution = Solution()result = solution.arrayNesting(nums)print(f "Länge des längsten Zyklus: {result}")# Output: 4Diese Implementierungen sind optimiert, um Zyklen effizient zu erkennen und ihre Länge zu berechnen, wobei ein besuchtes Array verwendet wird, um unnötige Wiederverarbeitungen zu vermeiden.

Verwandter Artikel
Meta entfernt KI-Fotobearbeitungsfunktion nach Nutzerprotesten Meta entfernt KI-Fotobearbeitungsfunktion nach Nutzerprotesten Meta, der Social-Media-Riese, ist erneut in eine öffentliche Debatte über die heikle Balance zwischen künstlicher Intelligenz und dem Schutz der Privatsphäre der Nutzer verwickelt. Laut TechCrunch hat Meta’s Superintelligence Labs diese Woche einen n
DeepMind-CEO Hassabis: Ich schlafe sechs Stunden pro Tag und fühle mich normalerweise gegen 1 Uhr nachts energiegeladen. DeepMind-CEO Hassabis: Ich schlafe sechs Stunden pro Tag und fühle mich normalerweise gegen 1 Uhr nachts energiegeladen. Fortune hat kürzlich ein Interview mit Demis Hassabis, dem CEO von Google DeepMind, veröffentlicht, das seinen unkonventionellen Ansatz zu Erholung und Produktivität offenbart. Hassabis gab bekannt, dass er sehr wenig schläft und seine wachen Stunden
OpenAI und Anthropic kämpfen trotz Umsatzrückgängen um Marktanteile OpenAI und Anthropic kämpfen trotz Umsatzrückgängen um Marktanteile Obwohl jüngste Berichte darauf hindeuten, dass OpenAI seine Umsatzziele verfehlt hat, was an diesem Dienstag Druck auf die Technologieaktien ausübte, zeigen sich private Investoren in KI-Labore weiter
Empfehlungen zu verwandten Spezialthemen
Videoerstellung KI-Generatoren für ansprechende Kurzvideos für Reels, Shorts und Produkteinführungskampagnen
KI-Generatoren für ansprechende Kurzvideos für Reels, Shorts und Produkteinführungskampagnen

Die besten KI-Generatoren für kurze Video-Hooks des Jahres 2026 für Reels, Shorts und Produkteinführungskampagnen! XIX.AI stellt erstklassige, leistungsstarke und bahnbrechende Tools zusammen, die in Praxistests überzeugende Ergebnisse liefern, die Sie unbedingt ausprobieren sollten. Diese wöchentlich aktualisierte Seite bietet Vergleichsrankings zwischen kostenlosen und kostenpflichtigen Angeboten, damit Sie die perfekte Lösung finden, um Ihre Kreativität und Produktivität bei der Erstellung von Inhalten zu steigern. Entdecken Sie jetzt die Seite und sichern Sie sich Ihren KI-Vorteil!

11 Tools
xix.ai
Schreiben KI-Tools zur Gliederung von Artikeln für das Verfassen langer Texte
KI-Tools zur Gliederung von Artikeln für das Verfassen langer Texte

2026: Die neuesten, besten und am besten bewerteten KI-Tools zur Erstellung von Gliederungen für lange Texte! Diese sorgfältig zusammengestellte Sammlung umfasst leistungsstarke, bahnbrechende Tools, die präzise, strukturierte Gliederungen liefern – getestet unter realen Bedingungen –, um die Effizienz beim Schreiben deutlich zu steigern. XIX.AI gehört zu dieser Eliteauswahl. Holen Sie sich einen Vergleich zwischen kostenlosen und kostenpflichtigen Angeboten, der Ihnen bei der Auswahl des perfekten Tools hilft. Entdecken Sie die Tools jetzt und sichern Sie sich Ihren KI-Vorteil!

9 Tools
xix.ai
Chatbot Die besten KI-Rollenspiel-Chat-Apps für Sprachpraxis, Vorstellungsgesprächsvorbereitung und tägliche Sprechflüssigkeit
Die besten KI-Rollenspiel-Chat-Apps für Sprachpraxis, Vorstellungsgesprächsvorbereitung und tägliche Sprechflüssigkeit

2026 Neueste Besten Top-bewerteten KI-Rollenspiel-Chat-Apps für Sprachpraxis, Vorstellungsgesprächsvorbereitung und tägliche Sprachflüssigkeit! XIX.AI kuratiert eine leistungsstarke, spielfeldverändernde Sammlung, die kostenlose gegen kostenpflichtige Vergleiche, reale Tests und wöchentlich aktualisierte Rankings bietet. Diese unbedingt auszuprobierenden Tools helfen Ihnen, Ihre Schreibfähigkeiten zu verbessern, Hürden der Sprachflüssigkeit zu überwinden und die Kommunikationseffizienz in allen alltäglichen Szenarien zu steigern. Entdecken Sie jetzt Ihr perfektes Werkzeug für Ihre Sprachentwicklung!

10 Tools
xix.ai
Musikkomposition KI-Tools zur Stim-Trennung für die Remix-Produktion, die Vorbereitung von Samples und Karaoke-Master
KI-Tools zur Stim-Trennung für die Remix-Produktion, die Vorbereitung von Samples und Karaoke-Master

Die besten und am besten bewerteten KI-Tools zur Stem-Trennung des Jahres 2026 – speziell ausgewählt für Remix-Produktionen, die Vorbereitung von Samples und Karaoke-Masters. Diese leistungsstarken, bahnbrechenden Tools haben sich in der Praxis bewährt und bieten präzise Audioisolierung, wodurch die Produktivität erheblich gesteigert wird. XIX.AI stellt einen wöchentlich aktualisierten Vergleichsleitfaden zwischen kostenlosen und kostenpflichtigen Lösungen bereit, der Ihnen hilft, die für Ihre Anforderungen passende Lösung zu finden, die Sie unbedingt ausprobieren sollten. Entdecken Sie ihn jetzt und sichern Sie sich Ihren KI-Vorteil.

8 Tools
xix.ai
Datenanalyse KI-basierte SQL-Copiloten für Umsatz-Dashboards, Kanalanalysen sowie Produktmetriken
KI-basierte SQL-Copiloten für Umsatz-Dashboards, Kanalanalysen sowie Produktmetriken

2026: Die neuesten und besten AI-SQL-Copiloten – alle in der Rangliste ganz oben! XIX.AI sammelt eine leistungsstarke Auswahl an Tools, die wöchentlich mit aktualisierten Tests aus der Praxis erweitert wird. Mit diesen unverzichtbaren Werkzeugen können Sie präzise Umsatzübersichten erstellen, Verkaufsprozesse analysieren sowie Produktmetriken schnell überwachen und so Ihre Produktivität erheblich steigern. Entdecken Sie jetzt das perfekte Tool für datenbasierte Entscheidungsfindung! 238 Zeichen

9 Tools
xix.ai
Musikkomposition Die besten KI-Tools zum Komponieren von Melodien für Songentwürfe
Die besten KI-Tools zum Komponieren von Melodien für Songentwürfe

2026 Neueste Besten Top-Bewerteten KI-Melodie-Schreibtools für Songentwürfe! XIX.AI hat eine hochleistungsfähige, bahnbrechende Kollektion zusammengestellt, die strengen Praxistests unterzogen wurde, um das beste Schreiberlebnis zu liefern. Sie finden detaillierte kostenlose versus kostenpflichtige Vergleiche, präzise Ranglisten und unbedingt auszuprobierende Optionen, die darauf ausgelegt sind, Ihnen zu helfen, beeindruckende Songentwürfe mühelos zu erstellen und Ihre kreative Produktivität erheblich zu steigern. Entdecken Sie jetzt Ihr perfektes Tool!

8 Tools
xix.ai
Kommentare (1)
0/500
NicholasLewis
NicholasLewis 21. Februar 2026 05:00:40 MEZ

Als ich das Problem gestern selbst probiert habe, habe ich ewig gebraucht. Aber die Erklärung hier, wie man mit DFS die optimalen zyklischen Muster findet, ist super nachvollziehbar. Hoffentlich kann ich das bei der nächsten Interview-Frage anwenden. 🤞

OR