[LeetCode] 每日一题 2643. 一最多的行(简单题)
题目链接
题目描述
给你一个大小为 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
的数量,并记录 1
最多的行索引。如果发现当前行的 1
数量超过了之前记录的最大值,就更新结果。因为题目要求在多个最大值行时选择索引最小的行,我们只需要在发现更大 1
数量时更新即可,不需要额外处理相等情况
代码实现
class Solution {
public int[] rowAndMaximumOnes(int[][] mat) {
int[] ans = new int[] { 0, 0 };
for (int i = 0; i < mat.length; i++) {
int count = 0;
for (int j = 0; j < mat[0].length; j++) {
if (mat[i][j] == 1) {
count++;
}
}
if (count > ans[1]) {
ans[0] = i;
ans[1] = count;
}
}
return ans;
}
}
复杂度分析
时间复杂度:
O(m * n)
,其中m
是矩阵的行数,n
是列数。我们需要遍历整个矩阵,因此时间复杂度是O(m * n)
空间复杂度:
O(1)
,仅使用了常数级别的额外空间存储结果数组
总结
这道题思路清晰,直接遍历矩阵统计 1
的数量,并实时更新答案。没有复杂的数据结构或算法
希望这篇分享能为你带来启发!如果你有任何问题或建议,欢迎在评论区留言,与我共同交流探讨。
License:
CC BY 4.0