力扣 73. 矩阵置零

🔗 https://leetcode.cn/problems/set-matrix-zeroes

题目

  • 给一个 n * m 的二维数组,如果有一个 0 元素,则把对应的行列都置为零
  • 要求 in-place

思路

  • 直观的想法是遍历一遍矩阵,用 set 分别记录下 0 元素对应的行和列,再遍历下矩阵,对命中相关行列的元素置零。不过该方法不符合题目要求,需要有额外的存储空间
  • 取第一行和第一列作为标记位,把 0 元素对应的 row0 0col 设置为 0,遍历矩阵时根据这些标志位,判断当前元素是否需要设置为 0
    • 需要特殊处理下第一行和第一列的 0 元素,避免在遍历的过程中标志位被修改

代码

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        bool mark_row = 0, mark_col = 0;
        for (int i = 0; i < matrix.size(); i++) {
            for (int j = 0; j < matrix[i].size(); j++) {
                if (matrix[i][j] == 0) {
                    if (i == 0) {
                        mark_row = true;
                    }
                    if (j == 0) {
                        mark_col = true;
                    }
                    if(i== 0 || j == 0) continue;
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        for (int i = 1; i < matrix.size(); i++) {
            for (int j = 1; j < matrix[i].size(); j++) {
                if (matrix[i][0] == 0) matrix[i][j] = 0;
                if (matrix[0][j] == 0) matrix[i][j] = 0;
            }
         }
        if (mark_row) {
            for (int i = 0; i < matrix[0].size(); i++) matrix[0][i] = 0;
        }

        if (mark_col) {
            for (int i = 0; i < matrix.size(); i++) matrix[i][0] = 0;
        }
        
    }
};v
相关推荐
行者全栈架构师6 分钟前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构
小宋102120 分钟前
OpenTelemetry GenAI可观测性实战:串起模型、工具、Token与错误
java·人工智能·算法·贪心算法
嫂子开门我是_我哥22 分钟前
青少年抑郁、焦虑、失眠与自杀相关表现的症状联系:一篇网络分析论文所使用的算法深度解读
论文阅读·算法·论文笔记
字节跳动的猫30 分钟前
LikeShop 商品评价体系二开:追评、晒图审核与评价标签筛选功能开发
运维·数据结构·数据库
渊鱼L33 分钟前
CAD随机颗粒插件2D V2.0 更新说明
算法
Lazionr34 分钟前
unordered_map和unordered_set的使用
开发语言·c++·算法
行者全栈架构师40 分钟前
从 55% 到 6%:一个快餐营养规划器的算法迭代实录
后端·算法·架构
Laurie三省1 小时前
现场版却配上录音室版的歌词?聊聊我给开源 Mac 歌词软件写的多源打分算法
算法·macos·go
对空六课1 小时前
Vue 组件曝光埋点为什么会重复触发?去重方案与实现思路
服务器·前端·算法·数据分析
HZY1618yzh1 小时前
下一代编程语言出炉
c++·算法