Java 力扣2923. 找到冠军 I

2923. 找到冠军 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 队强
思路一:
根据题意查找冠军队伍,对于本题就是查找二维数组grid[i][j]符合条件的i或者j,如果按照行去判断设计的状态比按照列复杂,此处使用列做枚举判断,出现 i != j 并且grid[i][j] != 1 时就找到了冠军j
思路二:
当然还可以另一种思路 a 队比 b 队强,b 队比 c 队强,那么 a 队比 c 队强,grid[i][j]代表这i与j哪个队强,那么在n个队伍中我们就按个遍历这些队伍即可。

代码如下:
使用列做枚举判断

	public int findChampion(int[][] grid) {
        // 判断列中是否有1 有就说明i强于j
        int length = grid.length;
        for (int j = 0; j < length; j++) {
            //设置冠军标识
            boolean isChampion = true;
            for (int i = 0; i < length; i++) {
                if (i != j && grid[i][j] == 1) {
                    // 出现二维数组值为1 说明j不为冠军
                    isChampion = false;
                    break;
                }
            }
            //如果冠军标识未改变则返回j
            if (isChampion) {
                return j;
            }
        }
        return -1;
    }

使用列做枚举判断

	public int findChampion(int[][] grid) {
		//初始化队伍个数及当前假设冠军=0
    	int n = grid.length,champion=0;
    	//遍历n个队伍依次查找是否存在最强队champion
        for (int i = 0; i < n; i++) {
        	//根据grid判断是否有最强队champion,如果有则进行赋值
            if(i!=champion && grid[i][champion] == 1){
            	// grid[i][champion] == 1,那么 i 队比 champion 队 强
            	// 将冠军变量更新为i
                champion = i;
            }
        }
        return champion;
    }

运行结果如下:
(含有注释效果会低,去掉注释后内存由提升)
在这里插入图片描述

在这里插入图片描述

个人见解不喜勿喷!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值