lc73矩阵置零——尽可能减少空间复杂度

73. 矩阵置零 - 力扣(LeetCode)

法1:

很容易想到,O(m+n)空间复杂度,记录哪些行,哪些列有0。

法2:

常量空间,第一次做不太好想到。法1是用额外数组记录行列的0情况,法2优化为 用原矩阵的,第一列记录每行有0的情况,第一行用于记录每列有0的情况。而对于第一行和第一列本身就有0的情况,额外拿2个变量(常量)记录,有的话,把其置位0.

注意第二次遍历,从1,1开始,要忽略第一行和第一列。

复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        boolean rowExist = false;
        boolean colExist = false;

        int m = matrix.length;
        int n = matrix[0].length;      
        //第一次遍历,统计
        for(int i = 0;i<m;i++) {
            for(int j=0; j<n; j++) {
                if(matrix[i][j] == 0) {
                    if(i == 0)
                        rowExist = true;
                    if(j == 0)
                        colExist = true;
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        //第二次遍历变0
        for(int i = 1;i<m;i++) {
            for(int j=1; j<n; j++) {
                if(matrix[i][0] == 0 || matrix[0][j] == 0)
                    matrix[i][j] = 0;
            }
        }
        //是否第一行和第一列原本就有0
        if(rowExist) {
            for(int i = 0;i<n;i++)
                matrix[0][i] = 0;
        }
        if(colExist) {
            for(int i=0;i<m;i++)
                matrix[i][0]=0;
        }
    }
}

当然也可进一步优化,只用一个m[0][0]标记第1行有无0,再额外用一个变量记录第一列有无0即可。

相关推荐
云手机掌柜5 小时前
下一代社媒运营工具:亚矩阵云手机集成AIGC与数字人技术引领内容革命
大数据·线性代数·智能手机·矩阵·aigc
索迪迈科技1 天前
算法题(203):矩阵最小路径和
线性代数·算法·矩阵
Hi202402172 天前
使用 Apollo TransformWrapper 生成相机到各坐标系的变换矩阵
数码相机·线性代数·矩阵·自动驾驶·apollo
塔中妖2 天前
【华为OD】最大子矩阵和
算法·华为od·矩阵
君名余曰正则2 天前
机器学习实操项目01——Numpy入门(基本操作、数组形状操作、复制与试图、多种索引技巧、线性代数)
线性代数·机器学习·numpy
点云SLAM2 天前
四元数 (Quaternion)与李群SE(3)知识点(1)
线性代数·slam·四元数·旋转矩阵·位姿表示·李群se(3)·四元数插值
代码的余温2 天前
Oracle RAC认证矩阵:规避风险的关键指南
数据库·oracle·矩阵
阿巴Jun3 天前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
沧海一粟青草喂马3 天前
抖音批量上传视频怎么弄?抖音矩阵账号管理的专业指南
大数据·人工智能·矩阵
小麦矩阵系统永久免费3 天前
小麦矩阵系统:让短视频分发实现抖音快手小红书全覆盖
大数据·人工智能·矩阵