LeetCode -Hot100 - 73. 矩阵置零

前言

本专栏主要通过"LeetCode 热题100",来捡起自己本科阶段的算法知识与技巧。语言主要使用c++/java。如果同样正在练习LeetCode 热题100的朋友欢迎关注或订阅本专栏。有疑问欢迎留言交流~

题目描述

题目链接

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

思路

最开始我不知道什么是"原地算法"。gpt给的答复是:原地算法(In-place algorithm)是指在执行算法时不需要额外的存储空间,或者只需要常数级别的额外存储空间的算法。换句话说,算法的输入数据被直接修改以产生输出结果,而不需要创建额外的数据结构来存储输出结果或中间结果。

如果只是不用额外的数组来存储二维数组,不难。只要发现一个0然后对当前的数组的行列赋值0就好,但需要注意不要把后面没有开始判断的数字给赋值0了。既然怕前面的赋值操作影响后面的数组,其实完全可以用数组记录下来哪些行和列要归0。然后最后统一来赋值0就好。

Java代码如下:

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        boolean[] row = new boolean[m];
        boolean[] col = new boolean[n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                //发现0
                if (matrix[i][j] == 0) {
                    row[i] = col[j] = true;//只需要记录下来这些row 和 col为true
                }
            }
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (row[i] == true || col[j] == true) {
                    matrix[i][j] = 0;
                }
            }
        }
    }
}
相关推荐
myloveasuka10 分钟前
3-8 译码器(正式型号74LS138、 74HC138、74HCT138 等))
笔记·算法·计算机组成原理·硬件
wen__xvn14 分钟前
基础算法集训第17天:二分查找
算法·leetcode·职场和发展
myloveasuka15 分钟前
MREQ̅ 信号
笔记·算法·计算机组成原理
亲爱的非洲野猪18 分钟前
动态规划进阶:区间DP深度解析
算法·动态规划
QiZhang | UESTC24 分钟前
【算法题学习方法调整】回溯核心逻辑调整:从记代码到套逻辑调整
算法·学习方法
救救孩子把26 分钟前
59-机器学习与大模型开发数学教程-5-6 Adam、RMSProp、AdaGrad 等自适应优化算法
人工智能·算法·机器学习
Σίσυφος190026 分钟前
PCL 中常用的滤波对比
算法
进击的小头26 分钟前
连续系统离散化方法(嵌入式信号处理实战指南)
c语言·算法·信号处理
永远都不秃头的程序员(互关)40 分钟前
【决策树深度探索(五)】智慧之眼:信息增益,如何找到最佳决策问题?
算法·决策树·机器学习
智者知已应修善业43 分钟前
【输出方形点阵】2024-11-1
c语言·c++·经验分享·笔记·算法