162. 矩阵归零

作者: 和蔼的zhxing | 来源:发表于2018-02-28 22:18 被阅读10次

给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。
需要在原矩阵上完成操作。

样例
给出一个矩阵

[
  [1, 2],
  [0, 3]
]

返回

[
  [0, 2],
  [0, 0]
]

先找为零的位置,再分别置零

一种显而易见的方法是先找到为零的位置,把这些位置记下来,然后根据这些位置来进行进行一整行或者一整列清除。
记录位置的时候可以用vector<pair<int,int>>来一组一组来记录,这样是最直观的。我一开始的程序也是这么写的,没有什么问题。
后来发现,如果某一行或者某一列出现多个0的话,上面的方法没有避免重复,可能在前面的操作中都已经清零过了,所以想到可以吧row和col分别用一个set来记录,顺便去重,然后分别遍历两个set,这样就可以保证不做重复的事情,不出意外程序快乐1/3左右。两个版本的程序我都保留贴在下面:

    /*
    //使用pair的主程序
    void setZeroes(vector<vector<int>> &matrix) {
        vector<pair<int,int>> ZerosPos;
        for(int i=0;i<matrix.size();i++)
        {
            for(int j=0;j<matrix[0].size();j++)
            {
                if(matrix[i][j]==0)
                ZerosPos.push_back(make_pair(i,j));
            }
        }
        for(auto zp:ZerosPos)
        {
            setZeroR(matrix,zp.first);
            setZeroC(matrix,zp.second);
        }
        
        // write your code here
    }
    */
  //使用set的主程序
    void setZeroes(vector<vector<int>> &matrix) {
        set<int> row;
        set<int> col;
        for(int i=0;i<matrix.size();i++)
        {
            for(int j=0;j<matrix[0].size();j++)
            {
                if(matrix[i][j]==0)
                {row.insert(i);
                col.insert(j);
                }
            }
        }
        for(auto r:row) setZeroR(matrix,r);
        for(auto c:col)  setZeroC(matrix,c);
        
        
        // write your code here
    }
    static void setZeroR(vector<vector<int>> &mat,int row)
    {
        mat[row]=vector<int>(mat[row].size(),0);      //整行直接置零
    } 
    static void setZeroC(vector<vector<int>> &mat,int col)
    {
        for(int i=0;i<mat.size();i++)
        mat[i][col]=0;             //这一列置零,因为在不同的vector<int>中,所以只能这么一个一个做。
    }

相关文章

  • 162. 矩阵归零

    给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。需要在原矩阵上完成操作。 样例给出一个矩阵 ...

  • 2019-01-16

    LeetCode 162. Find Peak Element Description A peak elemen...

  • LeetCode #162 #81 2018-08-16

    162. Find Peak Element https://leetcode.com/problems/find...

  • 162.

    今晚流氓兔推荐的歌曲是《Drenched》,曲婉婷。深圳又下雨了,听着这首歌有种雨中散步的感觉。伴随着橙黄色的街灯...

  • LeetCode 161-165

    162. 寻找峰值[https://leetcode-cn.com/problems/find-peak-elem...

  • leetcode-162. 寻找峰值

    题目: 162. 寻找峰值[https://leetcode-cn.com/problems/find-peak-...

  • Leetcode 162 寻找峰值

    162. 寻找峰值[https://leetcode-cn.com/problems/find-peak-elem...

  • 162.成功

    一万个人,有一万种成功的定义,而我理解的成功不过是用自己喜欢的方式,活出自己喜欢的样子!不管他人如何看你,开心认真...

  • 2018-06-10

    归零自在: 归零才能如实反映万物 归零才能准确称量这个世界 归零才无有分别 归零才能完全融入 归零才能完全包容 归...

  • 2020-10-20

    情绪归零,付出归零

网友评论

    本文标题:162. 矩阵归零

    本文链接:https://www.haomeiwen.com/subject/ecqwxftx.html