Heim >Backend-Entwicklung >PHP-Tutorial >Gültige Paaranordnung
2097. Gültige Paaranordnung
Schwierigkeit:Schwer
Themen: Tiefensuche, Graph, Eulerscher Schaltkreis
Sie erhalten ein 0-indiziertes 2D-Integer-Array-Paare, wobeipairs[i] = [starti, endi]. Eine Anordnung von Paaren ist gültig, wenn für jeden Index i mit 1 <= i < pairs.length, wir haben endi-1 == starti.
Geben Sie jede gültige Anordnung von Paaren zurück.
Hinweis: Die Eingaben werden so generiert, dass eine gültige Paaranordnung vorliegt.
Beispiel 1:
Beispiel 2:
Beispiel 3:
Einschränkungen:
Hinweis:
Lösung:
Wir können es als Euler-Pfad-Problem in der Graphentheorie betrachten. In diesem Fall können die Paare als Kanten und die Werte innerhalb der Paare (Anfang und Ende) als Knoten behandelt werden. Wir müssen einen Eulerschen Pfad finden, der jede Kante genau einmal verwendet, und das Ende einer Kante muss mit dem Anfang der nächsten Kante übereinstimmen.
Lassen Sie uns diese Lösung in PHP implementieren: 2097. Gültige Paaranordnung
<?php /** * @param Integer[][] $pairs * @return Integer[][] */ function validArrangement($pairs) { ... ... ... /** * go to ./solution.php */ } // Example usage: $pairs1 = [[5, 1], [4, 5], [11, 9], [9, 4]]; $pairs2 = [[1, 3], [3, 2], [2, 1]]; $pairs3 = [[1, 2], [1, 3], [2, 1]]; print_r(validArrangement($pairs1)); // Output: [[11, 9], [9, 4], [4, 5], [5, 1]] print_r(validArrangement($pairs2)); // Output: [[1, 3], [3, 2], [2, 1]] print_r(validArrangement($pairs3)); // Output: [[1, 2], [2, 1], [1, 3]] ?> </p> <h3> Erläuterung: </h3> <ol> <li> <p><strong>Grafikkonstruktion</strong>:</p> <ul> <li>Wir erstellen das Diagramm mithilfe einer Adjazenzliste, wobei jeder Schlüssel ein Startknoten und der Wert eine Liste von Endknoten ist.</li> <li>Wir pflegen außerdem den Ausgangs- und Eingangsgrad für jeden Knoten, was uns hilft, den Startknoten für den Euler-Pfad zu finden.</li> </ul> </li> <li> <p><strong>Startknoten finden</strong>:</p> <ul> <li>Ein Eulerscher Pfad beginnt an einem Knoten, bei dem der Ausgangsgrad um 1 größer als der Eingangsgrad ist (falls ein solcher Knoten existiert).</li> <li>Wenn kein solcher Knoten vorhanden ist, ist der Graph ausgeglichen und wir können bei jedem Knoten beginnen.</li> </ul> </li> <li> <p><strong>Hierholzer-Algorithmus</strong>:</p> <ul> <li>Wir beginnen am Startknoten und folgen wiederholt Kanten, markieren sie als besucht, indem wir sie aus der Adjazenzliste entfernen.</li> <li>Sobald wir einen Knoten ohne weitere ausgehende Kanten erreichen, gehen wir zurück und erstellen das Ergebnis.</li> </ul> </li> <li> <p><strong>Ergebnis zurückgeben</strong>:</p> <ul> <li>Das Ergebnis wird aufgrund der Art und Weise, wie wir zurückverfolgen, in umgekehrter Reihenfolge erstellt, also kehren wir es am Ende um.</li> </ul> </li> </ol> <h3> Beispielausgabe: </h3> <pre class="brush:php;toolbar:false"><?php /** * @param Integer[][] $pairs * @return Integer[][] */ function validArrangement($pairs) { ... ... ... /** * go to ./solution.php */ } // Example usage: $pairs1 = [[5, 1], [4, 5], [11, 9], [9, 4]]; $pairs2 = [[1, 3], [3, 2], [2, 1]]; $pairs3 = [[1, 2], [1, 3], [2, 1]]; print_r(validArrangement($pairs1)); // Output: [[11, 9], [9, 4], [4, 5], [5, 1]] print_r(validArrangement($pairs2)); // Output: [[1, 3], [3, 2], [2, 1]] print_r(validArrangement($pairs3)); // Output: [[1, 2], [2, 1], [1, 3]] ?>
Dieser Ansatz findet effizient eine gültige Anordnung von Paaren, indem er das Problem als Eulersches Pfadproblem in einem gerichteten Graphen behandelt.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt vonGültige Paaranordnung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!