Set Matrix Zeroes

本文介绍了一种在不使用额外空间的情况下,通过一个结构数组记录矩阵中为0的点的坐标,并利用该数组高效地将相应行和列置零的方法。此算法旨在优化内存使用并提高执行效率。

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

二维数组中为0的元素,就把该元素所在的行和列都置为0

思路:

开个结构数组p,用p记录该二维数组中为0的点的i,j脚标。

然后分别遍历p中的行脚标,和列脚标,来设置相应的行和列设为0即可。

用一个bool数组来去除重复行脚标和列脚标,提高效率。

代码:

struct point
{
    int i;
    int j;
};
const int MAXNUM=1000;
class Solution {
public:
    void setZeroes(vector<vector<int> > &matrix) {
        vector<struct point> p;
        p.resize(MAXNUM);
        int p_size=0;
        int m=matrix.size();//
        int n=matrix[0].size();//

        for (size_t i=0;i<m;++i){
            for (size_t j=0;j<n;++j){
                if(matrix[i][j]==0){
                    p[p_size].i=i;
                    p[p_size++].j=j;
                }
            }
        }

        vector<bool> has_been_set_row(MAXNUM,false);
        for (size_t loc=0;loc<p_size;++loc)
        {
            if(!has_been_set_row[p[loc].i]){
                for (int j=0;j<n;++j)
                    matrix[p[loc].i][j]=0;
                has_been_set_row[p[loc].i]=true;
            }
        }

        vector<bool> has_been_set_col(MAXNUM,false);
        for (size_t loc=0;loc<p_size;++loc)
        {
            if(!has_been_set_col[p[loc].j]){
                for (int i=0;i<m;++i)
                    matrix[i][p[loc].j]=0;
                has_been_set_col[p[loc].j]=true;
            }
        }

    }
};

 

转载于:https://www.cnblogs.com/fightformylife/p/4136759.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值