当前位置: 首页 > article >正文

73 矩阵置零

在这里插入图片描述
解题思路:
\qquad 原地算法,指除原有输入资料所占空间外,使用额外空间尽可能少(常数空间)的算法。本题容易想到的一种解法是,对于m x n的矩阵,一次遍历把含有0元素的行号、列号记录下来,然后再一次遍历把对应的行、列元素值更新为0,随后输出。这样所用的空间复杂度为 O ( m + n ) O(m+n) O(m+n),但其实可以进一步优化,使空间复杂度变为 O ( 1 ) O(1) O(1)

\qquad 为了达到 O ( 1 ) O(1) O(1),需要利用原输入矩阵的空间,记录含有0的行号、列号。可以更改矩阵第一行、第一列的数字来记录是否含有0。至于第一行是否含有0元素,可以使用第一列的第一个元素记录,第一列本身是否含有0,可以使用额外的bool变量单独记录。

\qquad 记录是否含0的过程,可以按照任意顺序开展,但更新矩阵0元素时,需注意最后处理第一行、第一列的元素,不然会影响其他矩阵元素记录的信息。

	void setZeroes(vector<vector<int>>& matrix) {
        bool isZero = false;
        int m = matrix.size(), n = matrix[0].size();
        for(int i = 0; i < m; i++)
        {
            if(matrix[i][0] == 0) isZero = true;
        }

        for(int i = 0; i < m; i++)
        {
            for(int j = 1; j < n; j++)
            {
                if(matrix[i][j] == 0)
                {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        for(int i = m-1; i >= 0; i--)
        {
            for(int j = 1; j < n; j++)
            {
                if(matrix[i][0] == 0 || matrix[0][j] == 0)
                {
                    matrix[i][j] = 0;
                }
            }
        }
        
        if(isZero)
        {
            for(int i = 0; i < m; i++)
            {
                matrix[i][0] = 0;
            }
        }
    }

http://www.kler.cn/a/320265.html

相关文章:

  • Cyberchef使用功能之-多种压缩/解压缩操作对比
  • NavVis VLX3的精度怎么去进行验证?【上海沪敖3D】
  • 零基础Java第二十二期:异常(二)
  • 深度学习的实践层面
  • 【Apache Paimon】-- 2 -- 核心特性 (0.9.0)
  • Spring Cloud Alibaba [Gateway]网关。
  • c# sqlite判断某表是否存在的方法
  • 【JavaEE】数据链路层协议和DNS
  • 嵌入式开发中学习C++的用处?
  • 【C++掌中宝】类和对象(一):类的定义和实例化
  • 现代餐饮服务:Spring Boot 点餐系统
  • 柯桥小语种学习之语言交流 | 德语餐厅用语
  • 《星际拓荒》风灵月影修改器探索秘籍:揭开宇宙奥秘,遨游无垠星系
  • java日志框架之Log4j
  • 计算物理精解【4】-Maxima计算
  • 文献阅读——基于拉格朗日乘子的电力系统安全域边界通用搜索方法
  • 18924 二叉树的宽度
  • 修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)
  • 如何分析开源项目
  • 如何使用numpy反转数组
  • 使用Python解决数据分析中的相关性分析
  • 论前端框架的对比和选择 依据 前端框架的误区
  • AMEYA360代理:兆易创新GD32A7系列全新一代车规级MCU介绍
  • 【Python】:列表使用方法! 附带教程源码
  • 手机解压软件加密指南:让文件更安全
  • docker - 迁移和备份