73. 矩阵置零
- 1、题目
- 2、题目分析
- 3、复杂度最优解代码示例
- 4、适用场景
1、题目
给定一个 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]]
提示:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
进阶:
- 一个直观的解决方案是使用
O(mn)
的额外空间,但这并不是一个好的解决方案。 - 一个简单的改进方案是使用
O(m + n)
的额外空间,但这仍然不是最好的解决方案。 - 你能想出一个仅使用常量空间的解决方案吗?
Related Topics
- 数组
- 哈希表
- 矩阵
2、题目分析
3、复杂度最优解代码示例
public void setZeroes(int[][] matrix) {
Set<Integer> row_zero = new HashSet<>();
Set<Integer> col_zero = new HashSet<>();
int row = matrix.length;
int col = matrix[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (matrix[i][j] == 0) {
row_zero.add(i);
col_zero.add(j);
}
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (row_zero.contains(i) || col_zero.contains(j)) {
matrix[i][j] = 0;
}
}
}
}
4、适用场景
矩阵置零的操作在多个领域都有广泛的应用,包括但不限于:
- 图像处理:在图像处理中,矩阵置零操作可以用于去除图像中的噪声,或者对图像进行二值化处理。
- 数据压缩:在线性代数和科学计算领域,矩阵置零操作可以用于稀疏矩阵的压缩存储,从而提高存储效率和计算速度。
- 机器学习:在机器学习中,矩阵置零操作可以用于特征选择,通过将某些特征的值设为0,可以忽略这些特征的影响,从而简化模型或提高模型的解释性。
- 算法设计:在编程领域,特别是在解决一些算法问题时,矩阵置零操作也是一种常见的技巧。例如,LeetCode上的73题“矩阵置零”就要求实现一个函数,将矩阵中某元素为0的行和列都置为0。
- 电路分析:在电路分析中,矩阵置零操作可以用于模拟电路中的开路故障,即某个节点出现故障时,将其对应的行和列都置为0,以模拟该节点与其他节点的连接断开。