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
。笔记
- 循环 是一系列节点 a1, a2, ..., an, an 1 使得节点 a1 与节点 a1 是同一节点an 1,节点 a1, a2, ..., an 是不同的,并且有一个有向对于范围 [1, n].
- DAG 是一个没有任何周期的有向图。
示例1:
- 输入: n = 3,边 = [[0,1],[1,2]]
- 输出: 0
- 解释: 1队比0队弱,2队比1队弱,所以冠军是0队。
示例2:
- 输入: n = 4,边 = [[0,2],[1,3],[1,2]]
- 输出: -1
- 说明: 队伍 2 比队伍 0 和队伍 1 弱。队伍 3 比队伍 1 弱。但是队伍 1 和队伍 0 并不比其他队伍弱。所以答案是-1。
约束:
- 1
m == Edges.length
- 0 边[i].length == 2
- 0 边[i][0] != 边[i][1]
- 生成输入,如果a队强于b队,则b队不强于a队。
- 生成的输入使得如果a队强于b队并且b队强于c队,则a队强于c队。
提示:
- 冠军在 DAG 中的入度应为 0。
解决方案:
我们需要在给定的有向无环图 (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 ?>
解释:
-
输入解析:
- n 是团队数量。
- Edges 是图中有向边的列表。
-
初始化入度:
- 创建一个大小为 n 的数组 inDegree,初始化为 0。
-
计算入度:
- 对于每条边 [u, v],增加 v 的入度(v 队多一个入边)。
-
寻找候选人:
- 迭代 inDegree 数组并收集入度为 0 的索引。这些索引代表没有其他更强球队的球队。
-
决出冠军:
- 如果恰好有一支队伍的入度为0,则它是唯一的冠军。
- 如果多个团队或没有团队的入度为 0,则返回 -1。
示例演练
示例1:
- 输入:n = 3,边 = [[0, 1], [1, 2]]
- 入度:[0, 1, 1]
- 入度为 0 的团队:[0]
- 输出:0(Team 0 是唯一的冠军)。
示例2:
- 输入:n = 4,边 = [[0, 2], [1, 3], [1, 2]]
- 入度:[0, 0, 2, 1]
- 入度为 0 的团队:[0, 1]
- 输出:-1(有多个潜在冠军)。
复杂性分析
-
时间复杂度:
- 计算入度:O(m),其中 m 是边数。
- 检查团队:O(n),其中 n 是团队数量。
- 总计:O(n·m)。
-
空间复杂度:
- inDegree 数组:O(n).
这个解决方案非常高效,并且在给定的约束条件下工作。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
- 领英
- GitHub
以上是寻找冠军 II的详细内容。更多信息请关注PHP中文网其他相关文章!

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Dreamweaver CS6
视觉化网页开发工具

Atom编辑器mac版下载
最流行的的开源编辑器