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;
                }
            }
        }
    }
}
相关推荐
10001hours1 小时前
初阶数据结构.1.顺序表.通讯录项目(只有源码和注释)
数据结构·算法
Emilia486.3 小时前
八大排序算法
算法·排序算法
blammmp3 小时前
算法专题十九:记忆化搜索(暴搜->记忆化搜索)
算法·深度优先·记忆化搜索
MicroTech20254 小时前
边缘智能的创新:MLGO微算法科技推出基于QoS感知的边缘大模型自适应拆分推理编排技术
科技·算法·ai
王哈哈^_^6 小时前
【数据集】【YOLO】目标检测游泳数据集 4481 张,溺水数据集,YOLO河道、海滩游泳识别算法实战训练教程。
人工智能·算法·yolo·目标检测·计算机视觉·分类·视觉检测
巴里巴气6 小时前
第73题 矩阵置零
线性代数·算法·矩阵
voice6706 小时前
密码学实验二
算法·密码学·哈希算法
Blossom.1187 小时前
把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」
java·人工智能·python·算法·决策树·机器学习·宠物
寂静山林7 小时前
UVa 10989 Bomb Divide and Conquer
算法
兮山与8 小时前
算法23.0
算法