leetcode 76:set-matrix-zeros

题目描述

给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。
拓展:
你的算法有使用额外的空间吗?
一种比较直接的算法是利用O(m,n)的空间,但是这不是一个好的解法
使用简单的改进可以在O(m+n)的空间解决这个问题,但是还不是最佳的解法
你能在常量级的空间复杂度内解决这个问题吗?
题目分析:
创建两个map分别记载矩阵中值为0的行和列(map可去重),然后再遍历这两个map,如果有行和列被标记则把该行该列的元素全置为0。
代码如下:
 1 void setZeroes(vector<vector<int> > &matrix) {
 2         int m = matrix.size();
 3         int n = matrix[0].size();
 4         map<int,bool> row,col;
 5         for(int i = 0;i < m;i++)
 6         {
 7             for(int j = 0;j < n;j++)
 8             {
 9                 if(matrix[i][j] == 0)
10                     row[i] = col[j] = true;
11             }
12         }
13         
14         for(int i = 0;i < m;i++)
15         {
16             for(int j = 0;j < n;j++)
17             {
18                 if(row[i] || col[j])
19                     matrix[i][j] = 0;
20             }
21         }
22     }

 

posted @ 2020-08-11 13:48  请叫我小小兽  阅读(178)  评论(0编辑  收藏  举报