leetcode 73:矩阵置0

Leetcode 73:矩阵置零(最详细的解法!!!) 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法**。** 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输... 阅读详情

我的思路是 ,用一个hash set存 每个为0点的坐标,然后取出来后迭代置0; 这样做的话也有毛病:处有重复置0的情况

 

struct VectorHash{
	size_t operator() (const vector<int>& v) const{
		hash<int> hasher;
		size_t seed = 0;
		for(int i: v){
			seed ^= hasher(i) + 0x9e3779b9 + (seed << 6) + (seed >>2);
		}
		return seed;
	}
};
struct Equal_Vector{
	bool operator()(const vector<int>& v1, const vector<int>& v2 ) const{
		return v1[0] == v2[0] && v1[1] == v2[1];
	}
};
class Solution {
public:
    void setZeroes(vector<vector<int> >& matrix) {
    	int rows = matrix.size();
    	if(rows == 0){
    		return ;
    	}
    	int cols = matrix[0].size();
    	if(cols == 0){
    		return ;
    	}
    	// cout << " * "<< endl;
    	unordered_set<vector<int>, VectorHash, Equal_Vector> zero_pos;
    	for(int i=0; i<rows; ++i){
    		for(int j=0; j<cols; ++j){
    			if(matrix[i][j] == 0){
    				vector<int> temp;
    				temp.push_back(i);
    				temp.push_back(j);
    				zero_pos.insert(temp);
    				
    			}
    		}
    	}
    	for(unordered_set<vector<int>,VectorHash, Equal_Vector >::iterator ite = zero_pos.begin(); ite != zero_pos.end(); ++ite){
    		int r = (*ite)[0];
    		int l = (*ite)[1];
    		// r -> 0
    		for(int i=0; i<cols ;++i){
    			matrix[r][i] = 0;
    		}
    		// l -> 0
    		for(int i=0; i<rows; ++i){
    			matrix[i][l] = 0;
    		}
    	}
    }
};

 

其他解法:

先找行首列首是否有0,   用两个变量记录一下:是否要把行首、列首置零;

然后利用行首和列首 存当前矩阵  (该列。改行)是否置零的信息;

class Solution {
    public void setZeroes(int[][] matrix) {
        boolean rowFlag = false;
        //判断首行
        for (int i = 0; i < matrix[0].length; i++) {
            if (matrix[0][i] == 0) {
                rowFlag = true;
                break;
            }
        }

        boolean colFlag = false;
        for (int i = 0; i < matrix.length; i++) {
            if (matrix[i][0] == 0) {
                colFlag = true;
                break;
            }
        }

        for (int i = 1; i < matrix.length; i++) {
            for (int j = 1; j < matrix[0].length; j++) {
                if (matrix[i][j] == 0){
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        for (int i = 1; i < matrix[0].length; i++) {
            if (matrix[0][i] == 0) {
                for (int j = 0; j < matrix.length; j++) {
                    matrix[j][i] = 0;
                }
            }
        }

        for (int i = 1; i < matrix.length; i++) {
            if (matrix[i][0] == 0) {
                for (int j = 0; j < matrix[0].length; j++) {
                    matrix[i][j] = 0;
                }
            }
        }
        if (rowFlag){
            for (int i = 0; i < matrix[0].length; i++) {
                matrix[0][i] = 0;
            }
        }
        if (colFlag){
            for (int i = 0; i < matrix.length; i++) {
                matrix[i][0] = 0;
            }
        }
    }
}

 

 

LeetCode 73. 矩阵置零(Python)超详细题解 _ 原地算法+O(1)空间优化|面试高频 本文详细解析了LeetCode 73题"矩阵置零"的两种解法。基础版使用O(m+n)空间,通过两个标记数组记录需要置零的行列;最优版利用矩阵第一行和第一列作为标记位,实现O(1)空间复杂度。文章强调了不能边遍历边置零的误区,并提供了完整代码、复杂度分析和测试案例。特别指出了面试中常见的错误点,如忽略首行首列覆盖问题等。建议初学者先掌握基础解法,再进阶学习最优解法,以应对不同面试场景。同类矩阵处理问题可参考本文思路进行扩展练习。 阅读详情

相关推荐

STM32F407 FreeRTOS+LVGL移植实战:从驱动适配到性能优化

本文详细介绍了在STM32F407开发板上移植FreeRTOS和LVGL的实战经验,涵盖硬件准备、驱动适配、性能优化等关键步骤。通过TFTLCD屏幕驱动优化、DMA加速和任务优先级调整,显著提升界面流畅度,为嵌入式GUI开发提供实用解决方案。

weixin_29190651的博客 633

自定义hash键C++

参考:https://stackoverflow.com/questions/17016175/c-unordered-map-using-a-custom-class-type-as-the-key http://zh.cppreference.com/w/cpp/container/unordered_map/unordered_map https://www.cnblogs.c...

dianzi1117的博客 516

手把手教你用OpenCompass评估Qwen1.5-1.8B模型(含数据集配置详解)

本文提供了使用OpenCompass评估Qwen1.5-1.8B-Chat模型的详细实战教程。内容涵盖从创建独立Python环境、下载模型与核心数据集,到编写配置文件、执行评测命令及解读结果的完整流程。重点解析了模型与数据集的配置细节,并分享了性能调优与常见问题排查方法,旨在帮助开发者快速上手系统化的模型评估。

weixin_29228781的博客 137

【LeetCode-73】矩阵置零

我们可以用矩阵的第一行和第一列代替方法一中的两个标记数组,以达到 O(1) 的额外空间。在实际代码中,我们首先预处理出两个标记变量,接着使用其他行与列去处理第一行与第一列,然后反过来使用第一行与第一列去更新其他行与列,最后使用两个标记变量更新第一行与第一列即可。具体地,我们首先遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。请使用 原地 算法。...

xiaoguanglin的博客 314

coreldraw sp2精简版 x4_CorelDRAW X4下载-CorelDRAW X4 SP2 精简版_Win10镜像官网

CorelDRAW X4 SP2是一个专业图形设计软件,专用于矢量图形编辑与排版,借助其丰富的内容和专业图形设计、照片编辑和网站设计软件,您将能够随心所欲地表达自己的风格与创意,轻松创作徽标标志、广告标牌、车身贴和传单、模型绘制、插图描画、排版及分色输出等。CorelDRAW X4 SP2软件特色CorelDraw X4 相比两年前的 CorelDraw X3 加入了大量新特性,总计有50项以上,...

weixin_30346025的博客 8901

ESP32-CAM与Thonny的完美搭配:从烧录到通信的完整流程

本文详细介绍了如何将ESP32-CAM与Thonny IDE完美结合,从固件烧录到通信测试的完整流程。通过硬件连接、MicroPython固件烧录、Thonny环境配置以及摄像头功能开发等步骤,帮助开发者快速搭建高效的物联网开发环境,实现图像采集与无线通信功能。

tomato的博客 1125

73. 矩阵置零---js解法

题目描述: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 力扣链接: https://leetcode-cn.com/problems/set-matrix-zeroes/ 解题思路: 1.检查并标记第一行和第一列是否有0 2.使用第一行和第一列,来标记其余行列是否含有0 3.接下来,利用第一行和第一列的标0情况,将matrix中的数字标0 4.最后,处理第一行和第一列 如果firstCol

qq_45679015的博客 328

从BAM到bigWig:用UCSC工具链完成测序数据可视化的完整流程

本文详细介绍了从BAM文件到bigWig格式的基因组数据可视化完整流程,涵盖UCSC工具链配置、文件格式转换、参数优化及常见问题解决方案。通过实战指南帮助研究人员高效完成测序数据可视化,特别适合ChIP-seq和RNA-seq数据分析。

weixin_29309213的博客 707

73. 矩阵置零(JS实现)

1 题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ] 进阶: 一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个

zjw_python的博客 945

下载igv报错:Error loading genome hg38raw.githubusercontent.com...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 992

晶闸管选型参数,结构原理,工艺与注意问题总结

闸管(Thyristor)是一种半导体开关器件,也被称为可控硅整流器(SCR, Silicon Controlled Rectifier)。它可以在高电压和大电流条件下工作,常被用于交流电的控制和整流。本文对晶闸管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1284

LeetCode73:矩阵置0

https://leetcode.com/problems/set-matrix-zeroes/ 问题描述 Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Example 1: Input: [ [1,1,1], [1,0,1], [1...

一面之媛 199

第133章 PCL OrientedBoundingBox 有向包围盒

中文叫有向包围盒,是一种旋转过的包围盒。特点:不像AABB那样固定朝向坐标轴能更紧密地包裹物体适用于复杂姿态的物体,比如倾斜、旋转的物体通常通过PCA、惯性矩等算法确定方向。

yumeiguo的博客 264

Leetcode(73):矩阵置0

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 一个直接的解决方案是使用O(mn) 的额外空间,但这并不是一个好的解决方案。 一个简单的改进方案是使用 O(m + n) 的额...

dong87871311的博客 238

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c++ 数组置0_LeetCode刷题实战73:矩阵置零

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做矩阵置零,我们先来看题面:https://leetcode-cn.com/problems/set-matrix-zeroes/Given an m x n matrix. If...

weixin_39932181的博客 333

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【LeetCode刷题笔记-81 73:矩阵置0】

题目: 今天这题的m+n算法是很好想的,使用数组记录一下各行各列的0出现的情况,然后对应做上标记。我一开始没能想到用bool的数组,而是使用了两个set。虽然也做出来了,但还是不够简洁。 至于O(1)时间复杂度的算法,重点还是得想得到。拿第一行第一列来做标记,然后用常数空间的变量来记录第一行第一列是否置0; 那么同样,就可以想到只拿第一列置0,然后从最下面的那一行开始标记的算法。不过由于处理过程来说相对于第二种有点麻烦,所以我还是建议使用第二种。毕竟不是极限情况下,多这一个四字节的空间也无伤大雅。 C++

weixin_43890220的博客 132

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode73.矩阵置零

第二次循环遍历除了0行0列元素,在置零行|列元素置零,注意先不动0行0列元素;根据第0行|第0列是否有0标记,对第0行元素进行修改。思路:直接上进阶解法思路——仅使用常量空间解决方案。第一次循环遍历,记录置零的行号和列号。,则将其所在行和列的所有元素都设为。(0行 0列用来记录置零行列位置)的矩阵,如果一个元素为。

m0_64995001的博客 275

73. 矩阵置零

先记账,后清算”。不能遍历到一个 0 就立刻把整行整列变 0(因为这会污染后续的遍历,导致全变成 0)。必须先用两个辅助数组把“哪些行、哪些列坏了”记录下来,最后统一执行死刑。

一同进步 598

leetcode 73矩阵置0

如果边遍历边改,可能把“后来产生的 0”误认为是“原来就存在的 0”,导致更多行列错误地被置零。,也就是**“行需要置零或者列需要置零,只要满足一个条件就置零。因为矩阵遍历了两遍;这里之所以不能第一遍发现。就直接把整行整列改成。说明这一整行应该置零;说明这一整列应该置零。

qq_63176310的博客 221

【LeetCode Hot100】73.矩阵置零

针对矩阵置零问题,采用两个布尔数组标记含 0 的行与列,两次遍历完成矩阵原地置零。算法时间复杂度 O (mn),空间复杂度 O (m+n),实现简单直观,但未达到常量空间的进阶最优要求。

weixin_62593868的博客 299

LeetCode热题100——73.矩阵置零(题目+题解+答案)

标记信息可以用两个布尔数组实现:一个长度为 m 的 row 数组,row[i] = true 表示第 i 行需要清零;另一个长度为 n 的 col 数组,col[j] = true 表示第 j 列需要清零。如果 matrix[i][0] == 0 或 matrix[0][j] == 0,则把 matrix[i][j] 设为 0。遍历一次矩阵,记录下所有0元素所在的行号和列号,然后第二次遍历时,只要当前位置的行号或列号被标记过,就把该位置置为0。,则将其所在行和列的所有元素都设为。的矩阵,如果一个元素为。

wyhwyh___的博客 998

(18)LeetCode 73. 矩阵置零

本题的关键在于用矩阵自身的第一行和第一列作为标记数组,从而避免开辟额外空间。注意要提前记录第一行和第一列是否原本有 0,否则标记过程会覆盖掉这些原始信息,导致无法正确处理第一行和第一列本身。这种“原地标记”的技巧在矩阵类问题中经常出现,值得熟练掌握。扩展思考:如果要求不能修改第一行和第一列本身,则必须使用O(m+n)的额外标记数组,但本题允许,所以上述解法是最优的。

qq_46121420的博客 182

hot 100 73. 矩阵置零

不能使用额外空间只能在原数组上操作,我们可以把数组第一行第一列当作标记,看行列是否有0,遍历一遍标记。但第一行第一列怎么处理,可以先用boolen记录一下其他都修改完再处理,同时第一列是否有0用m[0][0]就能表示。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。请使用 原地 算法。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️⭐️⭐️(1~10星)

A2105153335的博客 102

算法题讲解 ---73.矩阵置零(从暴力到最优)

73.矩阵置零。

2401_87174643的博客 269

力扣hot100-73.矩阵置零-标记数组详解

矩阵 / 标记数组 / 两阶段处理不能边扫描边直接清零。必须先记录原始 0 影响哪些行、哪些列,再统一修改。rowZero[i] 记录第 i 行是否需要清零。colZero[j] 记录第 j 列是否需要清零。rowZero[i] || colZero[j] 为 true,就将 matrix[i][j] 置为 0。先标记要清零的行和列,再统一清零,避免新写入的 0 继续扩散。

2302_76756229的博客 255

LeetCode知识点总结 - 73

LeetCode 73. Set Matrix Zeroes

m0_59773145的博客 221
上一篇: leetcode -71: 简化路径
下一篇: leetcode75 颜色分类
就叫温华啦
博客等级 码龄11年 28粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值