2924。寻找冠军 II
难度:中等
主题:图表
一场比赛中有n支球队,编号从0到n-1;每个团队也是DAG中的一个节点。
给定整数 n 和一个 0 索引 长度为 m 的二维整数数组边,表示 DAG,其中 >dges[i] = [u i, vi] 表示有来自团队的有向边ui 到图表中的 vi 团队。
图中从a到b的有向边意味着a队强比b队弱比a队
如果没有b队比a队更强,A队将成为锦标赛的冠军
。如果有唯一冠军,则返回将成为锦标赛冠军的队伍,否则返回-1
。笔记
示例1:
示例2:
约束:
提示:
解决方案:
我们需要在给定的有向无环图 (DAG) 中识别 入度 为 0 的团队。没有传入优势的球队代表着没有其他球队比他们更强大的球队,这使得他们成为冠军的候选者。如果恰好有一支球队的入度为0,那么它就是唯一的冠军。如果有多个或没有这样的团队,结果为-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中文网其他相关文章!