[力扣 Hot100]Day18 矩阵置零

题目描述

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
在这里插入图片描述

出处

思路

在原数组上直接操作势必会出现“冗余”的0,即原本[i,j]处不是0,例如由于i行的其他位置有0导致[i,j]处被置0,从而j列本来没有0却被置0。因此需要辅助数组来存储需要被置0的位置,在遍历后再秋后算账。朴素的想法就是空间复杂度O(mn),优化一下只存行号和列号就是O(m+n),再优化就可以直接用矩阵的第0行和第0列来充当辅助数组,复杂度O(1),但需要注意的是一开始要避开第0行和第0列,以免辅助数组中出现“冗余”的0。

代码

class Solution {
   
public:
    void setZeroes(vector<vector<int>>& matrix) {
   
        int m=matrix.size();
        int n=matrix[0].size();
        int i,j;
        bool flag_m=false,flag_n=false;
        for(i=0;i<m;i++)
            if(matrix[i][0]==0)
                flag_n=true;//检测原始第一列是否应置为0
        for(j=0;j<n;j++)
            if(matrix[0][j]==0)
                flag_m=true;//检测原始第一行是否应置为0
        for(i=0; i<m;i++){
   
            for(j=0; j<n;j++){
   
                if(matrix[i][j]==0){
   
                    matrix[0][j]=0;
                    matrix[i][0]=0;
                }
            }
        }
        for(i=1; i<m;i++){
   //先避开第一行
            if(matrix[i][0]==0){
   
                for(j=1; j<n;j++){
   
                    matrix[i][j]=0;
                }
            }
        }
        for(j=1; j<n; j++){
   //先避开第一列
            if(matrix[0][j]==0){
   
                for(i=1; i<m; i++){
   
                    matrix[i][j]=0;
                }
            }
        }
        if(flag_m)
            for(j=0; j<n;j++)
                matrix[0][j]=0;
        if(flag_n)
            for(i=0;i<m;i++)
                matrix[i][0]=0;
    }
};

相关推荐

  1. 100】73.矩阵

    2024-01-31 16:36:00       46 阅读
  2. [ Hot100]Day14 合并区间

    2024-01-31 16:36:00       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 16:36:00       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 16:36:00       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 16:36:00       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 16:36:00       20 阅读

热门阅读

  1. PandaWallet :Web3.0世界的入口

    2024-01-31 16:36:00       32 阅读
  2. pg数据库替换指定ip

    2024-01-31 16:36:00       35 阅读
  3. Android Studio六大基本布局详解

    2024-01-31 16:36:00       28 阅读
  4. 内容运营常用的ChatGPT通用提示词模板

    2024-01-31 16:36:00       29 阅读
  5. 【C语言】(8)宏定义

    2024-01-31 16:36:00       35 阅读
  6. 第十二章 软件工程(上午题)

    2024-01-31 16:36:00       25 阅读
  7. IO

    2024-01-31 16:36:00       32 阅读