73. 矩阵置零
题目描述
给定一个 m x n
的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
示例 1:
1 2 |
|
示例 2:
1 2 |
|
提示:
- \(m\) \(=\) \(matrix.length\)
- \(n\) \(=\) \(matrix[0].length\)
- \(1\) \(≤\) \(m, n\) \(≤\) \(200\)
- \(-2^{31}\) \(≤\) \(matrix[i][j]\) \(≤\) \(2^{31} - 1\)
进阶:
- 一个直观的解决方案是使用 \(O(mn)\) 的额外空间,但这并不是一个好的解决方案。
- 一个简单的改进方案是使用 \(O(m + n)\) 的额外空间,但这仍然不是最好的解决方案。
- 你能想出一个仅使用常量空间的解决方案吗?
思路
原地算法 \(O(nm)\)
我们可以使用两个标记变量 row0
, col0
分别记录第一行和第一列是否包含0。
- 预处理出两个变量记录第一行和第一列是否有0。
- 遍历整个矩阵,用矩阵的第一行和第一列记录对应的行和列是否有0。
- 把含有0的行和列都置成0。
复杂度分析
时间复杂度:\(O(mn)\),其中 \(m\) 是矩阵的行数,\(n\) 是矩阵的列数。我们至多只需要遍历该矩阵两次。
空间复杂度:\(O(1)\)。我们只需要常数空间存储若干变量。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|