文章目录
- 题目
- 思路
- 代码
- 复杂度分析
- 时间复杂度
- 空间复杂度
- 结果
- 总结
题目
题目链接🔗
一场比赛中共有
n
n
n 支队伍,按从
0
0
0 到
n
−
1
n - 1
n−1 编号。
给你一个下标从 0 0 0 开始、大小为 n ∗ n n * n n∗n 的二维布尔矩阵 g r i d grid grid 。对于满足 0 ≤ i , j ≤ n − 1 0 \leq i, j \leq n - 1 0≤i,j≤n−1 且 i ≠ j i \neq j i=j 的所有 i , j i, j i,j :如果 g r i d [ i ] [ j ] = = 1 grid[i][j] == 1 grid[i][j]==1,那么 i i i 队比 j j j 队 强 ;否则, j j j 队比 i i i 队 强 。
在这场比赛中,如果不存在某支强于 a a a 队的队伍,则认为 a a a 队将会是 冠军 。
返回这场比赛中将会成为冠军的队伍。
示例 1:
输入:grid = [[0,1],[0,0]]
输出:0
解释:比赛中有两支队伍。
grid[0][1] == 1 表示 0 队比 1 队强。所以 0 队是冠军。
示例 2:
输入:grid = [[0,0,1],[1,0,1],[0,0,0]]
输出:1
解释:比赛中有三支队伍。
grid[1][0] == 1 表示 1 队比 0 队强。
grid[1][2] == 1 表示 1 队比 2 队强。
所以 1 队是冠军。
提示:
- n = = g r i d . l e n g t h n == grid.length n==grid.length
- n = = g r i d [ i ] . l e n g t h n == grid[i].length n==grid[i].length
- 2 ≤ n ≤ 100 2 \leq n \leq 100 2≤n≤100
- g r i d [ i ] [ j ] grid[i][j] grid[i][j] 的值为 0 0 0 或 1 1 1
- 对于所有 i i i, g r i d [ i ] [ i ] grid[i][i] grid[i][i] 等于 0 0 0.
- 对于满足 i ≠ j i \neq j i=j 的所有 i , j i, j i,j , g r i d [ i ] [ j ] ≠ g r i d [ j ] [ i ] grid[i][j] \neq grid[j][i] grid[i][j]=grid[j][i]均成立
- 生成的输入满足:如果 a a a 队比 b b b 队强, b b b 队比 c c c 队强,那么 a a a 队比 c c c 队强
思路
冠军应该比其他所有球队都强,根据这一个特性可以知道会有一个队伍和其他队伍的比较肯定是全部是 1 1 1,所以只需要遍历整个矩阵观察哪一行全部都是 1 1 1就可以了,当然这个队伍和自己比较的时候还是 0 0 0,这里特殊处理一下就好
代码
class Solution {
public:
int findChampion(vector<vector<int>>& grid) {
int len=grid.size();
bool pd=1;
for(int i=0;i<len;++i)
{
pd=1;
for(int j=0;j<len;++j)
{
if(i==j)continue;
if(grid[i][j]==0)
{
pd=0;
break;
}
}
if(pd)return i;
}
return len;
}
};
复杂度分析
时间复杂度
O ( n 2 ) O(n^2) O(n2)
空间复杂度
O(1)
结果
总结
遍历每支队伍,检查是否存在比它强的队伍来找到冠军队伍。