LC每日一题|20240413 - 2924. 找到冠军 II
一场比赛中共有
n支队伍,按从0到n - 1编号。每支队伍也是 有向无环图(DAG) 上的一个节点。给你一个整数
n和一个下标从 0 开始、长度为m的二维整数数组edges表示这个有向无环图,其中edges[i] = [ui, vi]表示图中存在一条从ui队到vi队的有向边。从
a队到b队的有向边意味着a队比b队 强 ,也就是b队比a队 弱 。在这场比赛中,如果不存在某支强于
a队的队伍,则认为a队将会是 冠军 。如果这场比赛存在 唯一 一个冠军,则返回将会成为冠军的队伍。否则,返回
-1。注意
- 环 是形如
a1, a2, ..., an, an+1的一个序列,且满足:节点a1与节点an+1是同一个节点;节点a1, a2, ..., an互不相同;对于范围[1, n]中的每个i,均存在一条从节点ai到节点ai+1的有向边。- 有向无环图 是不存在任何环的有向图。
提示:
1 <= n <= 100m == edges.length0 <= m <= n * (n - 1) / 2edges[i].length == 20 <= edge[i][j] <= n - 1edges[i][0] != edges[i][1]- 生成的输入满足:如果
a队比b队强,就不存在b队比a队强 - 生成的输入满足:如果
a队比b队强,b队比c队强,那么a队比c队强
题目级别:Medium
解题思路
我们只需要统计所有节点的 入度 ,获取入度为 0 的节点即可。根据题意,如果有超过 1 个节点的入度为 0 ,则返回 -1。
AC代码
class Solution {
fun findChampion(n: Int, edges: Array<IntArray>): Int {
val map = IntArray(n)
edges.forEach { map[it[1]]++ }
val first = map.indexOf(0)
val last = map.lastIndexOf(0)
return if (first == last) first else -1
}
}
时间复杂度:O(n^2),需要遍历整个edges数组
空间复杂度:O(n),需要定义一个长度为n的数组存储入度
碎碎念
没想到昨天竟然压中题了...