每日一题·LeetCode2643·一最多的行·Java

题目:

给你一个大小为 m x n 的二进制矩阵 mat ,请你找出包含最多 1 的行的下标(从 0 开始)以及这一行中 1 的数目。

如果有多行包含最多的 1 ,只需要选择 行下标最小 的那一行。

返回一个由行下标和该行中 1 的数量组成的数组。

示例 1:

输入:mat = [[0,1],[1,0]]
输出:[0,1]
解释:两行中 1 的数量相同。所以返回下标最小的行,下标为 0 。该行 1 的数量为 1 。所以,答案为 [0,1] 。 

示例 2:

输入:mat = [[0,0,0],[0,1,1]]
输出:[1,2]
解释:下标为 1 的行中 1 的数量最多该行 1 的数量为 2 。所以,答案为 [1,2] 。

示例 3:

输入:mat = [[0,0],[1,1],[0,0]]
输出:[1,2]
解释:下标为 1 的行中 1 的数量最多。该行 1 的数量为 2 。所以,答案为 [1,2] 。

提示:

  • m == mat.length 
  • n == mat[i].length 
  • 1 <= m, n <= 100 
  • mat[i][j] 为 0 或 1

详解:

题目很好理解,就是依次遍历数组,找出最多1的行,但是注意下面的小提示,该二维数组上的数只有0或者1,这就能够求和来算出最多1的行。

代码:

原代码:

class Solution {
    public int[] rowAndMaximumOnes(int[][] mat) {
        int rows=mat.length;
        int cols=mat[0].length;
        int[] ans =new int[2];
        int cnt=0;
        for(int i =0;i<rows;i++){
            for(int j=0;j<cols;j++){
                if(mat[i][j]==1){
                    cnt++;
                }
            }
            if(cnt>ans[1]){
                ans[0]=i;
                ans[1]=cnt;
            }
            cnt=0;
        }
        return ans;
    }
}

改后代码

 (减少判断是否等于1,提升了性能,同时把new出来的数组,直接给定)

class Solution {
    public int[] rowAndMaximumOnes(int[][] mat) {
        int rows=mat.length;
        int cols=mat[0].length;
        int[] ans ={0,0};
        int sum=0;
        for(int i =0;i<rows;i++){
            for(int j=0;j<cols;j++){
                sum+=mat[i][j];
            }
            if(sum>ans[1]){
                ans[0]=i;
                ans[1]=sum;
            }
            sum=0;
        }
        return ans;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值