题目描述:
一场比赛中共有 n
支队伍,按从 0
到 n - 1
编号。
给你一个下标从 0 开始、大小为 n * n
的二维布尔矩阵 grid
。对于满足 0 <= i, j <= n - 1
且 i != j
的所有 i, j
:如果 grid[i][j] == 1
,那么 i
队比 j
队 强 ;否则,j
队比 i
队 强 。
在这场比赛中,如果不存在某支强于 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 == grid.length
n == grid[i].length
2 <= n <= 100
grid[i][j]
的值为0
或1
- 对于所有
i
,grid[i][i]
等于0.
- 对于满足
i != j
的所有i, j
,grid[i][j] != grid[j][i]
均成立 - 生成的输入满足:如果
a
队比b
队强,b
队比c
队强,那么a
队比c
队强
题解
import java.util.Arrays;
import java.util.Scanner;
/**
* @author: hj
* @className: Solution42
* @Describe:LeeCode 2923 找到冠军1
*/
public class Solution42 {
public static void main(String[] args) {
//数组长度自己设置
int[][] team = new int[2][2];
int temp = 0;
Scanner scan = new Scanner(System.in);
for (int i = 0; i < team.length; i++){
for (int j = 0; j < team[i].length; j++){
temp = scan.nextInt();
team[i][j] = temp;
}
}
int champion = findChampion3(team);
System.out.println(champion);
}
/**
* @Description 题解1 暴力+桶
* @author hj
* @date 2024/4/12 13:21
* * @param grid
*
*/
public static int findChampion(int[][] grid){
int[] championTeam = new int[grid.length];
Arrays.fill(championTeam, 0);
for (int i = 0 ; i < grid.length; i++){
for (int j = 0; j < grid[i].length; j++){
if (grid[i][j] == 1){
championTeam[i]++;
}
}
}
int champion = championTeam[0];
int index = 0;
int LastChampion = champion;
for (int i = 1 ; i < championTeam.length; i++){
champion = Math.max(champion,championTeam[i]);
if (LastChampion != champion){
index = i;
LastChampion = champion;
}
}
return index;
}
/**
* @Description 题解2 参考冠军树
* @author hj
* @date 2024/4/12 13:21
* * @param grid
*
*/
public static int findChampion2(int[][] grid){
int champion = 0;
int championTeam = grid.length;
for (int i = 0; i < championTeam; i++){
if (grid[i][champion] != 0){
champion = i;
}
}
return champion;
}
/**
* @Description 题解3 求和比较
* @author hj
* @date 2024/4/12 13:29
* * @param null
*
*/
public static int findChampion3(int[][] grid){
int index = 0; //最高得分队伍
int championTeam = grid.length;
int[] teamGradeSum = new int[championTeam];
Arrays.fill(teamGradeSum, 0);
for (int i = 0; i < championTeam; i++){
for (int grade : grid[i]){
teamGradeSum[i] += grade;
}
}
for (int i = 0; i < championTeam; i++){
System.out.print(teamGradeSum[i] + "\t");
}
System.out.println();
int max = teamGradeSum[0]; //最高得分
for(int i = 1; i < teamGradeSum.length; i++){
if (max < teamGradeSum[i]){
max = teamGradeSum[i];
index = i;
}
}
return index;
}
}