题目
一场比赛中共有
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的有向边。- 有向无环图 是不存在任何环的有向图。
解题思路
- 参赛队伍数量为n个,因此可以通过创建boolean数组来标识队伍是否为冠军;
- 遍历队列数组,将较弱的一对的标记为false;
- 遍历boolean数组记录为true(即没有队伍比他强)的数量,并记录下标;
- 因为最强队只有一个,所以当true数量为1的时候,返回结果下标,否则返回-1。
代码展示
class Solution {public int findChampion(int n, int[][] edges) {boolean[] boos = new boolean[n];Arrays.fill(boos, true);for(int[] nums : edges){boos[nums[1]] = false;}int count = 0;int res = 0;for(int i = 0; i < n; i ++){if(boos[i]){count++;res = i;}}if(count == 1){return res;}return -1;}
}