leeCode每日一题-找到冠军 I

题目描述:

一场比赛中共有 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;
    }
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值