哈希--73. 矩阵置零/medium 理解度A

本文介绍了如何在给定矩阵中,若遇到0元素,则将其所在的行和列所有元素置零的原地算法,提供了一种常量空间复杂度的解决方案,并讨论了其在图像处理、数据压缩、机器学习和算法设计等多个领域的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、适用场景

    矩阵置零的操作在多个领域都有广泛的应用,包括但不限于:

    1. 图像处理:在图像处理中,矩阵置零操作可以用于去除图像中的噪声,或者对图像进行二值化处理。
    2. 数据压缩:在线性代数和科学计算领域,矩阵置零操作可以用于稀疏矩阵的压缩存储,从而提高存储效率和计算速度。
    3. 机器学习:在机器学习中,矩阵置零操作可以用于特征选择,通过将某些特征的值设为0,可以忽略这些特征的影响,从而简化模型或提高模型的解释性。
    4. 算法设计:在编程领域,特别是在解决一些算法问题时,矩阵置零操作也是一种常见的技巧。例如,LeetCode上的73题“矩阵置零”就要求实现一个函数,将矩阵中某元素为0的行和列都置为0。
    5. 电路分析:在电路分析中,矩阵置零操作可以用于模拟电路中的开路故障,即某个节点出现故障时,将其对应的行和列都置为0,以模拟该节点与其他节点的连接断开。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值