ホームページ >バックエンド開発 >PHPチュートリアル >チャンピオン II を探せ
2924。チャンピオン II を探せ
難易度: 中
トピック: グラフ
トーナメントには 0 から n - 1 までの番号が付けられた n チームがあります。各チームは DAG のノードでもあります。
整数 n と、DAG を表す長さ m の 0 インデックス付き 2D 整数配列エッジが与えられます。ここで、>dges[i] = [u i, vi] は、チームからの有向エッジがあることを示しますui からチーム vi をグラフに表示します。
グラフ内の a から b への有向辺は、チーム a がチーム b より強い、チーム b がチーム a より弱いことを意味します。
チーム a より強いチーム b が存在しない場合、チーム a がトーナメントのチャンピオンとなります。
ユニークなチャンピオンがいる場合はトーナメントのチャンピオンとなるチームを返します。それ以外の場合は、-1を返します。
メモ
例 1:
例 2:
制約:
ヒント:
解決策:
指定された有向非巡回グラフ (DAG) で 次数 が 0 のチームを識別する必要があります。流入エッジがないチームは、他のどのチームよりも強いチームを表しており、チャンピオンの候補となります。入次数が 0 のチームが 1 つだけ存在する場合、それが固有のチャンピオンになります。そのようなチームが複数ある場合、またはそのようなチームがない場合、結果は -1 になります。
このソリューションを PHP で実装してみましょう: 2924。チャンピオン II を探す
<?php /** * @param Integer $n * @param Integer[][] $edges * @return Integer */ function findChampion($n, $edges) { // Initialize in-degrees for all teams $inDegree = array_fill(0, $n, 0); // Calculate the in-degree for each team foreach ($edges as $edge) { $inDegree[$edge[1]]++; } // Find teams with in-degree 0 $candidates = []; for ($i = 0; $i < $n; $i++) { if ($inDegree[$i] == 0) { $candidates[] = $i; } } // If exactly one team has in-degree 0, return it; otherwise, return -1 return count($candidates) === 1 ? $candidates[0] : -1; } // Example 1 $n1 = 3; $edges1 = [[0, 1], [1, 2]]; echo "Example 1 Output: " . findChampion($n1, $edges1) . PHP_EOL; // Output: 0 // Example 2 $n2 = 4; $edges2 = [[0, 2], [1, 3], [1, 2]]; echo "Example 2 Output: " . findChampion($n2, $edges2) . PHP_EOL; // Output: -1 ?>
入力解析:
次数の初期化:
次数を計算:
候補を検索:
チャンピオンを決定:
時間計算量:
空間の複雑さ:
このソリューションは効率的であり、指定された制約内で機能します。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がチャンピオン II を探せの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。