【LeetCode 每日一题】2643. 一最多的行

111 阅读2分钟

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.length 
  • n == mat[i].length 
  • 1 <= m, n <= 100 
  • mat[i][j]01

解题思路:

  • 遍历每一行,统计该行中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)]