一天一道算法题(9):空间优化从O(mn)到O(1)的思路与实现解析
矩阵置零LeetCode 73题三种解法详解文章目录矩阵置零LeetCode 73题三种解法详解题目描述思路分析难点所在解法一O(mn) 空间最直观解法二O(mn) 空间改进解法三O(1) 空间最优解总结对比题目描述给定一个m x n的矩阵如果一个元素为0则将其所在行和列的所有元素都设为0。请使用原地算法。示例 1输入matrix [[1,1,1],[1,0,1],[1,1,1]] 输出[[1,0,1],[0,0,0],[1,0,1]]示例 2输入matrix [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出[[0,0,0,0],[0,4,5,0],[0,3,1,0]]思路分析难点所在在遍历矩阵的过程中如果将遇到的0所在行和列直接变为0那么后续遍历时我们无法分辨某个位置的0是原本就有的还是被我们修改出来的。这会导致错误传播将原本不该清零的位置也清零了。解法一O(mn) 空间最直观最直接的想法是复制一个完全相同的矩阵然后遍历原矩阵遇到0就在复制的矩阵中清空对应的行和列。这样我们始终基于原始状态进行操作避免了错误传播。funcsetZeroes(matrix[][]int){// 复制矩阵temp:make([][]int,len(matrix))fori:0;ilen(matrix);i{temp[i]append([]int(nil),matrix[i]...)}// 遍历复制的矩阵在原矩阵上修改fori:0;ilen(temp);i{forj:0;jlen(temp[i]);j{iftemp[i][j]0{// 清空当前行clear(matrix[i])// 清空当前列fork:0;klen(matrix);k{matrix[k][j]0}}}}}复杂度分析时间复杂度O(mn)需要遍历矩阵两次空间复杂度O(mn)复制了一个完整的矩阵这种方法虽然直观但不符合题目对原地算法的要求。解法二O(mn) 空间改进仔细观察我们其实不需要复制整个矩阵。只需要记录哪些行和哪些列需要清零即可。用两个布尔数组分别标记row[i] true表示第 i 行需要清零col[j] true表示第 j 列需要清零funcsetZeroes(matrix[][]int){// 行标记数组row:make([]bool,len(matrix))// 列标记数组col:make([]bool,len(matrix[0]))// 第一次遍历标记需要清零的行和列fori:0;ilen(matrix);i{forj:0;jlen(matrix[0]);j{ifmatrix[i][j]0{row[i]truecol[j]true}}}// 第二次遍历根据标记清零fori:0;ilen(matrix);i{forj:0;jlen(matrix[0]);j{ifrow[i]||col[j]{matrix[i][j]0}}}}复杂度分析时间复杂度O(mn)空间复杂度O(mn)这种方法比解法一好很多但仍然不是最优解。解法三O(1) 空间最优解能否只使用常量空间答案是肯定的核心思想利用矩阵的第一行和第一列作为标记数组。用matrix[0][j]标记第 j 列是否需要清零用matrix[i][0]标记第 i 行是否需要清零但这里有个问题matrix[0][0]既属于第一行又属于第一列会产生冲突。解决方案是用两个独立变量row1和col1分别记录第一行和第一列本身是否包含 0。funcsetZeroes(matrix[][]int){// 用两个变量记录第一行、第一列是否存在 0row1,col1:1,1// 检查第一行是否有 0forj:0;jlen(matrix[0]);j{ifmatrix[0][j]0{row10break}}// 检查第一列是否有 0fori:0;ilen(matrix);i{ifmatrix[i][0]0{col10break}}// 遍历除第一行第一列外的所有元素fori:1;ilen(matrix);i{forj:1;jlen(matrix[0]);j{ifmatrix[i][j]0{// 用第一行标记列matrix[0][j]0// 用第一列标记行matrix[i][0]0}}}// 根据标记清零除第一行第一列外fori:1;ilen(matrix);i{forj:1;jlen(matrix[0]);j{ifmatrix[i][0]0||matrix[0][j]0{matrix[i][j]0}}}// 最后处理第一行ifrow10{forj:0;jlen(matrix[0]);j{matrix[0][j]0}}// 最后处理第一列ifcol10{fori:0;ilen(matrix);i{matrix[i][0]0}}}复杂度分析时间复杂度O(mn)空间复杂度O(1)注意事项必须先处理除第一行第一列外的元素最后再处理第一行和第一列如果一开始就清零第一行或第一列会破坏标记信息总结对比解法空间复杂度特点复制矩阵O(mn)最直观但不符合题目要求标记数组O(mn)简单改进但非最优第一行第一列标记O(1)最优解面试首选这道题的核心在于如何用有限的额外空间记录行和列的清零信息。从 O(mn) 到 O(mn) 再到 O(1)每一步优化都体现了空间换时间的思想转变值得细细品味。

相关新闻

Qwen-Image-Lightning深度解析:4步极速AI图像生成实战指南

Qwen-Image-Lightning深度解析:4步极速AI图像生成实战指南

Qwen-Image-Lightning深度解析:4步极速AI图像生成实战指南 【免费下载链接】Qwen-Image-Lightning 项目地址: https://ai.gitcode.com/hf_mirrors/lightx2v/Qwen-Image-Lightning Qwen-Image-Lightning是基于Qwen-Image模型的轻量化极速版本,通过…

2026/8/13 20:54:19 阅读更多 →
refcard-org-mode核心功能详解:让你的文档编辑效率翻倍

refcard-org-mode核心功能详解:让你的文档编辑效率翻倍

refcard-org-mode核心功能详解:让你的文档编辑效率翻倍 【免费下载链接】refcard-org-mode Get organized and boost your productivity with our comprehensive Org mode syntax reference card! Get a quick access to helpful tips and tricks. #orgmode #syntax…

2026/8/13 20:54:19 阅读更多 →
大麦网抢票脚本逆向工程:从零构建自动化购票系统的完整指南

大麦网抢票脚本逆向工程:从零构建自动化购票系统的完整指南

大麦网抢票脚本逆向工程:从零构建自动化购票系统的完整指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 你是否曾因热门演唱会门票秒光而苦恼?是否…

2026/8/13 20:54:19 阅读更多 →

最新新闻

2026 主流数字化 SRM 系统盘点

2026 主流数字化 SRM 系统盘点

很多企业启动采购数字化,第一步就卡在数字化 SRM 系统的选型上。数字化 SRM 系统是打通供应商协同、实现采购全流程在线的核心工具,直接决定采购数字化的落地效果。 据工信部相关数据显示,当前我国企业数字化转型覆盖率已超过 60%&#xff0c…

2026/8/13 22:07:00 阅读更多 →
NVIDIA-Nemotron-3.5-Lightning vs Qwen 3.6:30B参数模型在编码与推理任务中的终极对决

NVIDIA-Nemotron-3.5-Lightning vs Qwen 3.6:30B参数模型在编码与推理任务中的终极对决

NVIDIA-Nemotron-3.5-Lightning vs Qwen 3.6:30B参数模型在编码与推理任务中的终极对决 【免费下载链接】NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16 在…

2026/8/13 22:07:00 阅读更多 →
建站后必看的网站建设谢辞怎么写才能打动人心及常见误区避坑指南

建站后必看的网站建设谢辞怎么写才能打动人心及常见误区避坑指南

今天想和大家聊一个稍微有点特殊,但又在很多专业网站建设完工交付时刻会被反复提及,甚至在某些高规格项目中显得至关重要的环节,那就是“网站建设谢辞”。听起来是不是觉得有点拗口?甚至有人会觉得,这难道不就是个“感谢词”或者“结语”嘛,至于搞得这么严肃、这么正式,…

2026/8/13 22:07:00 阅读更多 →
IA32-doc核心功能揭秘:为什么它是操作系统与虚拟化开发的必备工具

IA32-doc核心功能揭秘:为什么它是操作系统与虚拟化开发的必备工具

IA32-doc核心功能揭秘:为什么它是操作系统与虚拟化开发的必备工具 【免费下载链接】ia32-doc IA32-doc is a project which aims to put as many definitions from the Intel Manual into machine-processable format as possible 项目地址: https://gitcode.com/…

2026/8/13 22:07:00 阅读更多 →
深耕本地化服务龙岗永湖网站建设的专业指南与避坑实录

深耕本地化服务龙岗永湖网站建设的专业指南与避坑实录

在这个互联网早已渗透到我们生活毛细血管的时代,很多人可能会有一个误区,觉得网站就是摆在架子上的陈列品,做得漂漂亮亮就行。但如果你真这么想,那可能在起步阶段就要吃不少亏。特别是对于龙岗永湖地区的企业老板或者创业初期团队来说,"龙岗永湖网站建设"不仅仅…

2026/8/13 22:07:00 阅读更多 →
如何用SystemInformer终极监控系统:从蓝屏分析到恶意软件检测的完整指南

如何用SystemInformer终极监控系统:从蓝屏分析到恶意软件检测的完整指南

如何用SystemInformer终极监控系统:从蓝屏分析到恶意软件检测的完整指南 【免费下载链接】systeminformer A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Semina…

2026/8/13 22:06:00 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →