题目:
给你一个大小为 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;
}
}