写点什么

算法题每日一练:矩阵置零

作者:知心宝贝
  • 2023-05-01
    江苏
  • 本文字数:678 字

    阅读完需:约 2 分钟

算法题每日一练:矩阵置零

一、问题描述

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


题目链接:矩阵置零

二、题目要求

样例 1


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

样例 2


输入: 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;                }            }        }    }};
复制代码

五、测试结果



发布于: 刚刚阅读数: 3
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022-03-07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
算法题每日一练:矩阵置零_数据结构_知心宝贝_InfoQ写作社区