2643. 一最多的行(简单)

1,问题描述

2643. 一最多的行

难度:简单

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

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

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

示例 1:

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

示例 2:

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

示例 3:

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]01

2,初步思考

​ 简单题目,直接秒了
​ 遍历比较输出即可

3,代码处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.Arrays;

public class _2643一最多的行 {


// 解法1:直接遍历即可
public int[] rowAndMaximumOnes(int[][] mat) {
int idx = 0;
int idxMax = 0;
int cnt = 0;
while (idx < mat.length) {
int cur = 0;
for (int i = 0; i < mat[idx].length; i++) {
cur += mat[idx][i];
}
if (cur > cnt) {
cnt = cur;
idxMax = idx;
}
idx++;
}
return new int[]{idxMax, cnt};
}

// 数学方法处理
// 使用了工具速度还变慢了
public int[] rowAndMaximumOnes_math(int[][] mat) {
int idxMax = 0;
int cntMax = 0;
for (int i = 0; i < mat.length; i++) {
int cnt = Arrays.stream(mat[i]).sum();
if (cnt > cntMax) {
cntMax = cnt;
idxMax = i;
}
}
return new int[]{idxMax, cntMax};
}
}