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;
        }
    }
}

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

相关推荐
无限码力6 小时前
拼多多笔试真题-对角线遍历矩阵(C++/Py/Java /Js/Go)
矩阵·拼多多·拼多多笔试真题·拼多多技术岗笔试题目·拼多多机试
m0_547486661 天前
上海理工大学《线性代数B》期末试卷及答案2017-2023年(10份)PDF
线性代数
棒球1号位1 天前
《棒球1号位矩阵联盟:江西青少年棒球基地建设的破局之道》
线性代数·矩阵
AI_yangxi1 天前
好用的短视频矩阵系统
大数据·人工智能·矩阵
会博通·代码搬运工1 天前
会博通数字化智能工作站(龟仔家族):产品矩阵、部署架构与技术选型指南
运维·数据库·线性代数·矩阵·架构·api集成·电子档案合规
Bobolink_18 天前
TikTok矩阵账号如何批量养号?工作室级运营方案分享
矩阵·内容运营·跨境电商·tik tok·账号运营
H1785350909618 天前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
AI_yangxi18 天前
短视频矩阵系统专业公司
大数据·人工智能·矩阵
昇腾CANN18 天前
【cann-samples系列】GroupedMatmul MX量化矩阵乘的深度性能优化实践
线性代数·性能优化·矩阵·昇腾·cann
青山木18 天前
Hot 100 --- 矩阵置零
线性代数·算法·leetcode·矩阵·哈希算法