首页 > 其他分享 >73.矩阵置零

73.矩阵置零

时间:2023-08-16 20:12:22浏览次数:31  
标签:matrix int 矩阵 ++ zero 73 col row

73.矩阵置零

思路:
思路一: 用 O(m+n)O(m+n)O(m+n)额外空间

两遍扫matrix,第一遍用集合记录哪些行,哪些列有0;第二遍置0

思路二: 用O(1)O(1)O(1)空间

关键思想: 用matrix第一行和第一列记录该行该列是否有0,作为标志位

但是对于第一行,和第一列要设置一个标志位,为了防止自己这一行(一列)也有0的情况.注释写在代码里,直接看代码很好理解!

代码:

class Solution {
    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;
            }
        }  
    }
}

核心思想是为用第一行,第一列的数是0还是1,看往后是否置零。为啥先看,单独看行还是列呢?因为为啥留出来第一行列呢,因为改完了,不能影响接下来的,所以得留出来第一行和第一列。

class Solution {
    public void setZeroes(int[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        boolean row0_flag = false;
        boolean col0_flag = false;
        // 第一行是否有零
        for (int j = 0; j < col; j++) {
            if (matrix[0][j] == 0) {
                row0_flag = true;
                break;
            }
        }
        // 第一列是否有零
        for (int i = 0; i < row; i++) {
            if (matrix[i][0] == 0) {
                col0_flag = true;
                break;
            }
        }
        // 把第一行第一列作为标志位
        for (int i = 1; i < row; i++) {
            for (int j = 1; j < col; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }
        // 置0
        for (int i = 1; i < row; i++) {
            for (int j = 1; j < col; j++) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
        }
        if (row0_flag) {
            for (int j = 0; j < col; j++) {
                matrix[0][j] = 0;
            }
        }
        if (col0_flag) {
            for (int i = 0; i < row; i++) {
                matrix[i][0] = 0;
            }
        } 
    }
}

转载:
链接:https://leetcode.cn/problems/set-matrix-zeroes/solutions/6594/o1kong-jian-by-powcai/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:matrix,int,矩阵,++,zero,73,col,row
From: https://www.cnblogs.com/chenyi502/p/17636064.html

相关文章

  • P2073题解
    链接:P2073送花题意:有若干朵花,每个有两个属性(美丽值和价格)。你需要维护\(3\)种操作:1.添加一朵花(如果之前有价格相同的忽略此操作)2.删除最贵的花3.删除最便宜的花最后输出两个数:美丽值的总和和价格总和解法:经典的平衡树题。对于第一种操作,关键在于判重。先询问一下有......
  • 【8月摸鱼计划】cw32f0有浮点计算单元吗?怎么使用矩阵求逆?
    cw32f0是一款基于中国开源项目的芯片,它并不具备浮点计算单元。因此,无法直接进行浮点数运算。然而,您仍然可以通过一些方法来近似实现浮点数的计算。一种常见的方法是使用定点数表示浮点数,并通过手动实现相应的运算算法来达到类似的效果。这需要根据具体的应用场景设计相应的固定点......
  • CH582 CH592 CH573 Central提高连接速度
    主机连接很慢,怎么解决?主机端开启高速扫描//TRUEtousehighscandutycyclewhencreatinglink#defineDEFAULT_LINK_HIGH_DUTY_CYCLEFALSE//FALSE改成TRUE,启动高速扫描,增加连接速度GAPRole_CentralEstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,......
  • 图论之存图-----邻接矩阵
    跟着思路敲了一遍,感觉清晰多了,但是还得多复习。就是利用了深度搜索,很奇妙。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+10;intw[N][N];intvis[N];intn,m;inta,b,c;voiddfs(intu){ vis[u]=true; if(vis[u]){ for(inti=1;i<=......
  • 矩阵最值
    题目描述我们有一个N  行  M列的矩阵,现在小Q有K 个问题,每次询问一个以(X1,Y1)为左上角, (X2,Y2)为右下角的子矩阵的最大值。输入格式第一行三个整数N,M,K。接下来N行,每行有 M个整数,设Ai,j 为矩阵i行j 列的数字。接下来k行,每行4个整数  ......
  • hdu 4291(矩阵快速幂+循环节)
    AShortproblemTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):2487    AcceptedSubmission(s):876ProblemDescriptionAccordingtoaresearch,VIMuserstendtohaveshorterfing......
  • CUDA之矩阵转置(全局内存、共享内存)
    使用全局内存完整代码链接A合并访问、B非合并访问#ifdefUSE_DPtypedefdoublereal;#elsetypedeffloatreal;#endif__global__voidtranspose1(constreal*A,real*B,constintN){constintnx=blockIdx.x*blockDim.x+threadIdx.x;const......
  • 8-15| _ctypes.COMError: (-2147352567, '发生意外。', ('无法获取 Document 对象', '
    此错误是一个COM错误,它与试图从Python通过`pyautocad`与AutoCAD通信时出现的问题有关。错误信息"无法获取Document对象"指示了问题的本质,即Python无法访问AutoCAD的当前文档。这里有一些建议来解决这个问题:1.**确保AutoCAD已经运行**:在尝试从Python访问Aut......
  • 54. 螺旋矩阵
    54.螺旋矩阵classSolution{publicList<Integer>spiralOrder(int[][]matrix){List<Integer>list=newArrayList<>();if(matrix==null||matrix.length==0||matrix[0].length==0){returnlist;......
  • 2024年秋招赛码网刷题-判断奇偶数、读取未给出行列数的矩阵
    1defis_even(n):2return1ifn%2==0else034n=int(input())56result=is_even(n)7print(result)#最后一行不能用return因为return只能在函数内部使用。在顶层代码中用return不合法 ......