当前位置: 首页 > news >正文

LeetCode 2643.一最多的行:模拟(更新答案)

【LetMeFly】2643.一最多的行:模拟(更新答案)

力扣题目链接:https://leetcode.cn/problems/row-with-maximum-ones/

给你一个大小为 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

解题方法:模拟

使用一个变量 m x mx mx记录当前一行中的最多1的个数,使用 a n s ans ans记录第一个有 m x mx mx个1的行的下标。

遍历每一行,统计每一行的1的个数。如果这一行的1的个数比mx多,就更新mx和ans。

最终返回{ans, mx}

  • 时间复杂度 O ( m n ) O(mn) O(mn)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/*
 * @Author: LetMeFly
 * @Date: 2025-03-22 22:42:28
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-03-22 22:43:30
 */
class Solution {
public:
    vector<int> rowAndMaximumOnes(vector<vector<int>>& mat) {
        int mx = 0, ans = 0;
        for (int i = 0; i < mat.size(); i++) {
            int cnt = 0;
            for (int j = 0; j < mat[i].size(); j++) {
                cnt += mat[i][j];
            }
            if (cnt > mx) {
                mx = cnt;
                ans = i;
            }
        }
        return {ans, mx};
    }
};
Python
'''
Author: LetMeFly
Date: 2025-03-22 22:44:18
LastEditors: LetMeFly.xyz
LastEditTime: 2025-03-22 22:44:32
'''
from typing import List

class Solution:
    def rowAndMaximumOnes(self, mat: List[List[int]]) -> List[int]:
        mx, ans = 0, 0
        for i in range(len(mat)):
            cnt = sum(mat[i])
            if cnt > mx:
                mx, ans = cnt, i
        return [ans, mx]
Java
/*
 * @Author: LetMeFly
 * @Date: 2025-03-22 22:49:36
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-03-22 22:50:36
 */
class Solution {
    public int[] rowAndMaximumOnes(int[][] mat) {
        int ans = 0, mx = 0;
        for (int i = 0; i < mat.length; i++) {
            int cnt = 0;
            for (int j = 0; j < mat[i].length; j++) {
                cnt += mat[i][j];
            }
            if (cnt > mx) {
                mx = cnt;
                ans = i;
            }
        }
        return new int[]{ans, mx};
    }
}
Go
/*
 * @Author: LetMeFly
 * @Date: 2025-03-22 22:51:01
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-03-22 22:52:04
 */
package main

func rowAndMaximumOnes(mat [][]int) []int {
    ans, mx := 0, 0
    for i := range mat {
        cnt := 0
        for _, t := range mat[i] {
            cnt += t
        }
        if cnt > mx {
            ans, mx = i, cnt
        }
    }
    return []int{ans, mx}
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关文章:

  • Wispr Flow,AI语言转文字工具
  • 鸿蒙NEXT开发案例:程序员计算器
  • 使用若依AI生成springBoot的前后端分离版本
  • 为WordPress自定义一个留言板
  • 【QA】QT编译过程和C++编译过程的区别?
  • Flutter Dart 异步支持全面解析
  • Rocky9.5基于sealos快速部署k8s集群
  • C++Primer学习(13.2 拷贝控制和资源管理)
  • 搜广推校招面经五十六
  • 基于linux平台的C语言入门教程(4)输入输出
  • MySQL表的增加、查询的基础操作
  • 解决用户同时登录轮询获取用户信息错乱,使用WebSocket和Server-Sent Events (SSE)
  • Vue 3 项目实现国际化指南 i18n
  • 鸿蒙harmonyOS笔记:练习CheckBoxGroup获取选中的值
  • JavaScript 中的性能优化:从基础到高级技巧
  • C++实现求解24点游戏
  • 异步编程与流水线架构:从理论到高并发
  • docker安装redis
  • 深入解析计算机组成原理:从硬件架构到程序运行的本质
  • 【算法day18】合并两个有序链表——将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
  • 找化学的答案,解人类的命题:巴斯夫的“变革者”成长之道
  • 特朗普的百日执政支持率与他“一税解千愁”的世界观和方法论
  • 校长套取学生伙食费设小金库,重庆通报6起违反八项规定典型问题
  • 广州一季度GDP为7532.51亿元,同比增长3%
  • 坤莹·帕塔玛·利斯达特拉任世界羽联主席
  • 夜读丨囿于厨房与爱