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
106

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
China Telecom investiert in Mianbi Intelligence und erhöht das Kapital für LLM und Dateninfrastruktur auf 713.000 Yuan China Telecom investiert in Mianbi Intelligence und erhöht das Kapital für LLM und Dateninfrastruktur auf 713.000 Yuan Das „Nationalteam“ und die führende Persönlichkeit der Tsinghua-Universität im Bereich der großen Modelle vertiefen ihre strategische Zusammenarbeit. Am 1. März 2026 unterzog sich die Beijing Mianbi I
Die Taotian Group treibt ihre KI-orientierte Umstrukturierung voran und gewährt Praktikanten kostenlose Token-Kontingente Die Taotian Group treibt ihre KI-orientierte Umstrukturierung voran und gewährt Praktikanten kostenlose Token-Kontingente Die TaoTian Group hat kürzlich den „AI Productivity Plan“ eingeführt, der darauf abzielt, die Integration von KI-Technologie in E-Commerce-Abläufe und F&E-Workflows durch die Zuweisung von Ressourcen
Glean nimmt die KI-Infrastruktur von Unternehmen ins Visier Glean nimmt die KI-Infrastruktur von Unternehmen ins Visier Der Wettlauf um die Vorherrschaft im Bereich der Unternehmens-KI gewinnt an Fahrt. Microsoft integriert Copilot in Office, Google bindet Gemini in Workspace ein, und sowohl OpenAI als auch Anthropic v
Empfehlungen zu verwandten Spezialthemen
Schreiben Die besten KI-Assistenten für Xianxia und Wuxia: Verfassen Sie epische Kultivierungsgeschichten und Kampfkunst-Choreografien
Die besten KI-Assistenten für Xianxia und Wuxia: Verfassen Sie epische Kultivierungsgeschichten und Kampfkunst-Choreografien

Entdecken Sie die besten KI-Assistenten des Jahres 2026 für das Verfassen epischer Xianxia- und Wuxia-Geschichten. Die von XIX.AI zusammengestellte Liste enthält erstklassige, bahnbrechende Tools, mit denen Sie den Fortschritt der Kultivierung und die Choreografie von Kampfkünsten meistern können. Vergleichen Sie kostenlose und kostenpflichtige Optionen anhand von Praxistests. Entfalten Sie Ihr kreatives Potenzial und beginnen Sie noch heute mit dem Schreiben!

10 Tools
xix.ai
Code AI-Mobilanwendungsentwicklungstools: Erstellen Sie plattformübergreifenden Flutter- und React Native-Code auf Basis von Eingaben.
AI-Mobilanwendungsentwicklungstools: Erstellen Sie plattformübergreifenden Flutter- und React Native-Code auf Basis von Eingaben.

Entdecken Sie die besten AI-Programmierwerkzeuge für mobile Anwendungen im Jahr 2026 – geeignet für Flutter und React Native. Unsere sorgfältig ausgewählte, hochbewertete Liste bietet leistungsstarke Lösungen, die es ermöglichen, plattformübergreifenden Code auf Basis von Vorgaben zu generieren. Vergleichen Sie kostenlose und kostenpflichtige Optionen anhand realer Tests – beschleunigen Sie Ihre Entwicklung und erstellen Sie bessere Anwendungen. Erfahren Sie mehr über die Rangliste auf XIX.AI!

10 Tools
xix.ai
Code Die besten KI-Generatoren für Chrome-Erweiterungen: Erstellen Sie individuelle Browser-Erweiterungen ganz ohne Programmierkenntnisse
Die besten KI-Generatoren für Chrome-Erweiterungen: Erstellen Sie individuelle Browser-Erweiterungen ganz ohne Programmierkenntnisse

Entdecken Sie die besten KI-Generatoren für Chrome-Erweiterungen des Jahres 2026 auf XIX.AI. Unsere sorgfältig zusammengestellte Liste enthält erstklassige, unverzichtbare Tools, mit denen Sie ganz ohne Programmierkenntnisse individuelle Browser-Erweiterungen erstellen können. Vergleichen Sie kostenlose und kostenpflichtige Optionen, sehen Sie sich Praxistests an und steigern Sie Ihre Produktivität. Entdecken Sie die aktuellen Rankings und finden Sie noch heute das perfekte Tool für sich!

10 Tools
xix.ai
Text-zu-Sprache Die beste künstliche Intelligenz für mehrsprachige TTS-Technologie: Erzeugung authentischer Sprache mit Muttersprachakzent in über 50 Sprachen
Die beste künstliche Intelligenz für mehrsprachige TTS-Technologie: Erzeugung authentischer Sprache mit Muttersprachakzent in über 50 Sprachen

Entdecken Sie die besten KI-basierten, mehrsprachigen TTS-Tools von 2026 – sie ermöglichen eine authentische Aussprache in natürlicher Muttersprachentonart in über 50 Sprachen. Erfahren Sie mehr über unsere hochrangig bewerteten und sorgfältig ausgewählten Tools, inklusive Vergleichen zwischen kostenlosen und kostenpflichtigen Varianten sowie Ergebnissen aus realen Tests. Finden Sie das perfekte Tool für Ihre Bedürfnisse auf XIX.AI und öffnen Sie so neue Möglichkeiten für die globale Kommunikation – noch heute!

10 Tools
xix.ai
Besprechungsassistent Die besten AI-Tools für die Automatisierung von Besprechungen – für eine schlauere und schnellere Zusammenarbeit
Die besten AI-Tools für die Automatisierung von Besprechungen – für eine schlauere und schnellere Zusammenarbeit

Entdecken Sie die besten und am meisten bewerteten AI-Tools für die Automatisierung von Besprechungen im Jahr 2026 – sie ermöglichen eine intelligente und schnellere Zusammenarbeit. Unsere sorgfältig ausgewählte Liste bietet leistungsstarke Lösungen, mit denen Sie Notizen, Zusammenfassungen und Aufgaben automatisch erstellen können. Vergleichen Sie kostenlose und bezahlte Optionen anhand von tatsächlichen Tests sowie wöchentlich aktualisierten Rankings – so steigern Sie die Produktivität Ihres Teams. Entdecken Sie die besten Tools jetzt bei XIX.AI.

10 Tools
xix.ai
Prompt KI-Vorgaben für Infrastructure-as-Code: Terraform- und Docker-Konfigurationen sicher bereitstellen
KI-Vorgaben für Infrastructure-as-Code: Terraform- und Docker-Konfigurationen sicher bereitstellen

Entdecken Sie die aktuellsten und am besten bewerteten KI-Prompts für Infrastructure-as-Code aus dem Jahr 2026. Die von XIX.AI zusammengestellte Auswahl hilft Ihnen dabei, Terraform- und Docker-Konfigurationen sicher bereitzustellen, Cloud-Setups zu automatisieren und die DevOps-Produktivität zu steigern. Vergleichen Sie kostenlose und kostenpflichtige Optionen anhand von Praxistests. Entdecken Sie die Möglichkeiten jetzt und sichern Sie sich Ihren KI-Vorteil.

10 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