算法题每日一练---第79天:矩阵置零

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

一、问题描述

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

题目链接:矩阵置零

二、题目要求

样例 1

2.png

输入: matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出: [[1,0,1],[0,0,0],[1,0,1]]
复制代码

样例 2

3.png

输入: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]
复制代码

考察

1.数组
2.建议用时15~25min
复制代码

三、问题分析

这是一道考察数组思维逻辑的题目,对于一开始给定数组先进行循环判断。

如果位置包含0,那么要记录下这个位置,用什么记录呢?

我们可以单独构造两个数组

vector<int>row(m),col(n);//行、列数组
复制代码

存储0位置,这一整行、列的数据。

最后再遍历一下当前元素所在的行、列,如果发现row[i]或者col[j]等于1,那么将元素置为0就行了。

四、编码实现

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int i,j,p=0,m=matrix.size(),n=matrix[0].size();//初始化数据
        vector<int>row(m),col(n);//行、列数组
        for(i=0;i<m;i++)//遍历求解位置
        {
            for(j=0;j<n;j++)
            {
                if(matrix[i][j]==0)
                {
                    row[i]=col[j]=1;//暂存行、列
                }
            }
        }
        for(i=0;i<m;i++)//之前记录位置的行、列置为0
        {
            for(j=0;j<n;j++)
            {
                if(row[i]||col[j])
                {
                    matrix[i][j]=0;
                }
            }
        }
    }
};

复制代码

五、测试结果

4.png

扫描二维码关注公众号,回复: 13789870 查看本文章

1.png

猜你喜欢

转载自juejin.im/post/7086405420687818783