Heim >Backend-Entwicklung >PHP-Tutorial >Teilen Sie Knoten in die maximale Anzahl von Gruppen ein
2493. Teilen Sie Knoten in die maximale Anzahl von Gruppen
aufSchwierigkeitsgrad: Hard
Themen: Breite zuerst Search, Union Find, Graph
Sie erhalten eine positive Ganzzahl n, die die Anzahl der Knoten in einem ungerichteten -Angraßen darstellt. Die Knoten sind von 1 bis n. gekennzeichnet
Sie erhalten auch eine 2D -Ganzzahl -Array -Kanten, an der Kanten [i] = [Ai , b i ] angeben, dass es ein bidirectional gibt Kante zwischen den Knoten A i und b i . Beachten Sie , dass der angegebene Diagramm getrennt werden kann.
Teilen Sie die Knoten des Diagramms in M-Gruppen (1-iNDEXED ), so dass:
Die maximale Anzahl von Gruppen (d. H. Maximal m), in die Sie die Knoten teilen können. Return -1, wenn es unmöglich ist, die Knoten mit den angegebenen Bedingungen zu gruppieren .
Beispiel 1:
Beispiel 2:
Einschränkungen:
Lösung: Das Problem, "Teilen Knoten in die maximale Anzahl von Gruppen" beinhaltet die Bestimmung der maximalen Anzahl von Gruppen, in die die Knoten eines ungerichteten Graphen unterteilt werden können, so dass: Vorverarbeitung: BFS zur Validierung der zweifeiligen Kräfte: Gruppenzahl berechnen: Ergebnisse kombinieren: implementieren wir diese Lösung in PHP: 2493. Teilen Sie Knoten in die maximale Anzahl von Gruppen Die Struktur der Union-Find (Disjoint-Set-Set) gruppiert Knoten in verbundenen Komponenten und führt zwei Hauptaufgaben aus: Eingabe: Schritte: Ausgabe: 4 Eingabe: Schritte: Ausgabe: -1 Dieser Ansatz behandelt das Gruppierungsproblem effizient, indem BFS für zweifache Überprüfungen und Tiefenberechnungen eingesetzt wird und gleichzeitig Union-Find verwendet wird, um das Komponentenmanagement zu vereinfachen. Die Lösung behandelt sowohl verbundene als auch getrennte Grafiken. Kontaktlinks Wenn Sie diese Serie hilfreich gefunden haben, sollten Sie das repository einen Stern auf GitHub geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken teilen? Ihre Unterstützung würde mir viel bedeuten! Wenn Sie mehr hilfreiche Inhalte wie diesen wünschen, können Sie mir gerne folgen:
Schlüsselpunkte
Ansatz
Plan
<?php /**
* @param Integer $n
* @param Integer[][] $edges
* @return Integer
*/
function magnificentSets($n, $edges) {
...
...
...
/**
* go to ./solution.php
*/
}
/**
* @param $graph
* @param $u
* @return int
*/
private function bfs($graph, $u) {
...
...
...
/**
* go to ./solution.php
*/
}
class UnionFind {
/**
* @var array
*/
private $id;
/**
* @var array
*/
private $rank;
/**
* @param $n
*/
public function __construct($n) {
...
...
...
/**
* go to ./solution.php
*/
}
/**
* @param $u
* @param $v
* @return void
*/
public function unionByRank($u, $v) {
...
...
...
/**
* go to ./solution.php
*/
}
/**
* @param $u
* @return mixed
*/
public function find($u) {
...
...
...
/**
* go to ./solution.php
*/
}
}
// Example usage:
$n = 6;
$edges = [[1,2], [1,4], [1,5], [2,6], [2,3], [4,6]];
echo maxGroups($n, $edges); // Output: 4
$n = 3;
$edges = [[1,2], [2,3], [3,1]];
echo maxGroups($n, $edges); // Output: -1
?>
Erläuterung:
1. Union-Find-Klasse
2. BFS für die partitale Überprüfung und Tiefenberechnung
3. Kombinieren Sie Ergebnisse
Beispiel Walkthrough
Beispiel 1
$n = 6;
$edges = [[1,2], [1,4], [1,5], [2,6], [2,3], [4,6]];
1 -> [2, 4, 5]
2 -> [1, 3, 6]
3 -> [2]
4 -> [1, 6]
5 -> [1]
6 -> [2, 4]
Beispiel 2
$n = 3;
$edges = [[1,2], [2,3], [3,1]];
1 -> [2, 3]
2 -> [1, 3]
3 -> [1, 2]
Zeitkomplexität
Ausgabe für Beispiele
$n = 6;
$edges = [[1,2], [1,4], [1,5], [2,6], [2,3], [4,6]];
echo magnificentSets($n, $edges); // Output: 4
$n = 3;
$edges = [[1,2], [2,3], [3,1]];
echo magnificentSets($n, $edges); // Output: -1
Das obige ist der detaillierte Inhalt vonTeilen Sie Knoten in die maximale Anzahl von Gruppen ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!