力扣 73. 矩阵置零

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

题目

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

思路

  • 直观的想法是遍历一遍矩阵,用 set 分别记录下 0 元素对应的行和列,再遍历下矩阵,对命中相关行列的元素置零。不过该方法不符合题目要求,需要有额外的存储空间
  • 取第一行和第一列作为标记位,把 0 元素对应的 [row][0] [0][col] 设置为 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
相关推荐
星逝*7 分钟前
LeetCode刷题-top100( 矩阵置零)
算法·leetcode·矩阵
小江村儿的文杰31 分钟前
理解UE4中C++17的...符号及enable_if_t的用法及SFINAE思想
数据结构·c++·ue4
zandy101144 分钟前
LLM与数据工程的融合:衡石Data Agent的语义层与Agent框架设计
大数据·人工智能·算法·ai·智能体
max5006001 小时前
本地部署开源数据生成器项目实战指南
开发语言·人工智能·python·深度学习·算法·开源
地平线开发者2 小时前
征程 6E/M|多 camera 场景示例
算法·自动驾驶
源代码•宸2 小时前
Leetcode—721. 账户合并【中等】
c++·经验分享·算法·leetcode·并查集
緈福的街口2 小时前
【leetcode】77.组合
算法·leetcode·职场和发展
NAGNIP2 小时前
深入 vLLM:高性能大模型推理框架解析
算法
JuneXcy2 小时前
字符串(2)
算法
快去睡觉~2 小时前
力扣152:乘积最大子数组
算法·leetcode·职场和发展