2643. 一最多的行
难度:简单
时间:2023/04/28
给你一个大小为 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.lengthn == mat[i].length1 <= m, n <= 100mat[i][j]为0或1
解题思路:
- 遍历每一行,统计该行中1的个数,如果当前行中1的个数大于之前的最大值,就更新最大值和对应的行号。最终返回最大值和行号即可。
class Solution {
public:
vector<int> rowAndMaximumOnes(vector<vector<int>>& mat) {
int i = 0, idx = 0, mx = 0;
for (const auto &m : mat) {
auto sum = accumulate(m.begin(), m.end(), 0);
if (sum > mx) {
mx = sum;
idx = i;
}
i += 1;
}
return {idx, mx};
}
};
- enumerate在字典上是枚举、列举的意思
- enumerate参数为可遍历/可迭代的对象(如列表、字符串)enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate
- enumerate(iterable, start=0),参数iterable为一个可迭代对象,start表示索引起始值。该函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,返回一个enumerate对象实例。
class Solution:
def rowAndMaximumOnes(self, mat: List[List[int]]) -> List[int]:
max_sum, idx = -1, 0
for i, row in enumerate(mat):
s = sum(row)
if s > max_sum:
max_sum, idx = s, i
return [idx, max_sum]
class Solution:
def rowAndMaximumOnes(self, mat: List[List[int]]) -> List[int]:
ones = [sum(i) for i in mat]
return [ones.index(max(ones)),max(ones)]