leetcode73矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 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]]

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -231 <= matrix[i][j] <= 231 - 1

进阶:

  • 一个直观的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个仅使用常量空间的解决方案吗?

步骤 1:问题性质分析

该问题要求对一个 m x n 的矩阵进行修改,如果矩阵中某个元素为 0,则将其所在的整行和整列都置为 0。要求实现一个 原地(in-place)算法,即不使用额外的空间,除了常量级的辅助变量。

输入条件
  • 一个 m x n 的二维矩阵 matrix
  • 矩阵中每个元素的值范围在 [-231, 231 - 1] 之间。
  • 矩阵的大小范围是 1 <= m, n <= 200
输出条件
  • 修改后的矩阵,其中包含 0 的元素所在的行和列均被置为 0
潜在边界条件
  • 矩阵没有任何 0 元素时,矩阵不变。
  • 矩阵只有一行或一列时,特殊处理。
  • 矩阵全为 0 的情况。

步骤 2:解题思路分析

1. 直观解法

最简单的方法是遍历整个矩阵并记录所有 0 的位置,随后再进行一次遍历,将记录的每个 0 所在的行和列都置为 0。该方法的空间复杂度是 O(m + n),时间复杂度为 O(m * n)。虽然这种方法可行,但并不符合 原地 算法的要求。

2. 进阶优化

为了满足 原地算法 的要求,我们可以不使用额外的数组来记录 0 的位置,而是利用矩阵的第一行和第一列作为标记位置。在遍历矩阵时,如果某个元素为 0,就将该元素所在行的第一个元素和列的第一个元素设为 0,作为标记。遍历结束后,再根据这些标记,将相应的行和列置为 0

具体步骤
  1. 第一步:先遍历矩阵,确定第一行和第一列是否需要全部置为 0。我们可以用两个布尔变量 row_zerocol_zero 分别标记第一行和第一列是否需要置为 0

  2. 第二步:从矩阵的第二行和第二列开始遍历,遇到 0 时,使用第一行和第一列的相应位置作为标记,即 matrix[i][0] = 0matrix[0][j] = 0

  3. 第三步:再从第二行和第二列开始遍历,如果 matrix[i][0] == 0matrix[0][j] == 0,则将该行或该列置为 0

  4. 第四步:最后根据 row_zerocol_zero,判断是否需要将第一行或第一列全部置为 0

算法复杂度
  • 时间复杂度:每个元素遍历两次,时间复杂度为 O(m * n)
  • 空间复杂度:只使用了常量级的辅助空间,空间复杂度为 O(1)

步骤 3:详细C++代码实现

详细注释
  1. 行列检测:首先扫描第一行和第一列,判断它们是否需要最终置为 0,用 row_zerocol_zero 来保存这些信息。
  2. 使用第一行和第一列作为标记:通过将其他行列中的 0 元素信息存储到第一行和第一列,避免额外空间开销。
  3. 根据标记修改矩阵:使用标记信息将相应的行和列置为 0
  4. 最后处理第一行和第一列:单独处理第一行和第一列,因为它们可能会在之前的标记阶段被修改。

步骤 4:算法优化和启发

  1. 算法优化:此解法通过用矩阵本身来存储标记,从而避免了额外的空间开销,是空间复杂度从 O(m + n) 降低到 O(1) 的一种典型优化手段。

  2. 效率提升:由于该算法的时间复杂度保持为 O(m * n),即遍历每个元素两次,因此即使对于最大边界情况(m, n 为 200),也能在较短时间内完成。

  3. 处理大规模数据集的能力:这种算法适用于大规模二维矩阵的数据处理,因为它通过降低空间复杂度节省了内存资源,在实际系统中有较好的性能表现。

步骤 5:实际应用示例

在实际生活中,类似的算法可以用于处理图片处理中的问题。例如在图片编辑软件中,如果某一部分图像像素损坏,软件可以通过将损坏的区域扩展到整个行或列来处理。这类似于将该行和列的所有像素置为 0,从而标记整个区域为无效。

另一个例子是数据挖掘中的缺失值处理。在处理大规模数据表格时,某些列或行的关键数据缺失时,可能需要将整个行或列标记为无效数据,这个过程类似于将矩阵的整行或列置为 0 的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451376.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【含开题报告+文档+PPT+源码】基于SpringBoot和Vue的编程学习系统

开题报告 随着信息技术的迅猛发展和数字化转型的深入推进&#xff0c;编程技能已经成为现代社会中不可或缺的一项基本能力。无论是软件开发、数据分析还是人工智能等领域&#xff0c;编程都扮演着至关重要的角色。因此&#xff0c;培养和提高编程技能对于个人职业发展和社会创…

eNSP静态路由

1、实现全网通&#xff0c;考虑环形拓扑的优势。 R12: [Huawei]interface GigabitEthernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 192.168.1.1 24[Huawei]interface GigabitEthernet 0/0/1 [Huawei-GigabitEthernet0/0/1]ip address 192.168.2.1 24[Huawei]interfa…

软件设计模式------工厂方法模式

工厂方法模式&#xff08;Factory Method Pattern&#xff09;&#xff0c;又称工厂模式&#xff0c;也叫虚拟构造器模式&#xff08;Virtual Constructor Pattern&#xff09;或多态工厂模式&#xff08;Polymorphic Pactory Pattern&#xff09;,属于类创建型模式。 我们知道…

Spring数据源对象管理:基于XML配置文件的第三方bean管理

前言 第三方资源配置管理 ioc容器和依赖管理&#xff0c;我们大多数管理的是自己创建的bean&#xff0c;如果是第三方提供的bean是如何管理&#xff0c;我们以数据源对象的ioc管理为例子进行说明。 步骤 第一步&#xff1a; 需要导入相应的依赖包&#xff08;导入坐标&#xf…

解构OpenAI swarm:利用Cursor进行框架分析与示例运行

解构OpenAI SWARM:利用Cursor进行框架分析与示例运行 1. 引言 在AI技术日新月异的今天,OpenAI再次为我们带来了惊喜。SWARM框架作为其最新研究成果,正在开创多智能体协作的新纪元。本文将带您深入探索这一框架,通过Cursor工具进行代码分析,并手把手教您安装运行SWARM。无论您…

Data+AI下的数据湖和湖仓一体发展史

DataAI下的数据湖和湖仓一体发展史 前言数据湖的“前世今生”AI时代的救星&#xff1a;湖仓一体湖仓一体实践演进未来趋势&#xff1a;智能化、实时化结语 前言 数据湖&#xff1f;湖仓一体&#xff1f;这是什么高科技新名词&#xff1f; 别急&#xff0c;我们慢慢聊。想象一…

机器学习:opencv--风格迁移

目录 前言 一、代码及步骤解释 1.图片与处理 2.加载模型 3.输出图像 前言 风格迁移&#xff08;Style Transfer&#xff09;是一种计算机视觉技术&#xff0c;旨在将一种图像的艺术风格应用到另一种图像上&#xff0c;同时保持其内容。 一、代码及步骤解释 1.图片与处理 …

从Apple Intelligence到远程机器人手术:更快、更安全的网络成企业业务关键

过去&#xff0c;企业的业务模式和网络架构相对简单&#xff0c;数据传输量不大&#xff0c;远程访问需求也不多。企业对网络的要求主要集中在确保基本的连通性和可用性。如今&#xff0c;企业通过将产品与各项高新技术深度融合&#xff0c;赋予传统产品活力和竞争力。以苹果公…

web3D越来越普及来,在站显示效果上没说的

Web3D 技术为网站带来了全新的视觉体验。它能够以逼真的三维形式展示产品、场景或数据&#xff0c;让用户仿佛身临其境。 无论是展示复杂的机械结构、精美的艺术品&#xff0c;还是模拟真实的自然环境&#xff0c;Web3D 都能以其出色的表现力吸引用户的注意力。 在显示效果上…

国产大模型基础能力大比拼 - 计数:通义千文 vs 文心一言 vs 智谱 vs 讯飞-正经应用场景的 LLM 逻辑测试

在大语言模型&#xff08;LLM&#xff09;不断涌现的时代&#xff0c;如何评估这些国产大模型的逻辑推理能力&#xff0c;尤其是在处理基础计数问题上的表现&#xff0c;成为了一个备受关注的话题。随着越来越多的国产大模型进入市场&#xff0c;比较它们在不同任务中的表现尤为…

mysql数据同步ES方案---DTS

在上一篇文章中&#xff0c;我通过一个简单的例子实现了如何通过 Canal 实现 MySQL 数据到 Elasticsearch 的同步&#xff0c;以满足增量捕获和实时同步的需求。然而实际情况中&#xff0c;比如在我之前工作的公司&#xff0c;为了减少运维工作量和代码操作的复杂性&#xff0c…

Android OpenGL粒子特效

在本篇&#xff0c;我们将开启一个新的项目&#xff0c;探索粒子的世界。粒子是一种基本的图形元素&#xff0c;它们通常被表示为一组点。通过巧妙地组合一些基础的物理效果&#xff0c;我们能够创造出许多令人惊叹的视觉效果。想象一下&#xff0c;我们可以模拟一个水滴从喷泉…

Xcode使用Instruments的dsym还原符号堆栈问题

文章目录 设置符号表的步骤参考资料 设置符号表的步骤 instruments 的 Settings 中&#xff0c;可以设置符号表的搜索路径 没有生效的话&#xff0c;继续看 File 里面的 Symbols - 出现弹窗后点击 Add Symbols - 然后再点击 Apply。 参考资料 https://xjkstar.github.i…

Unity URP shader ———魔系符文宝石是如何练成的

各位同学大家好 我已经很久没有没有写教程了&#xff0c;最近项目比较忙。各种加班各种带小孩儿&#xff0c;不过&#xff0c;老师一有机会也在给尽可能服务大家&#xff0c;今天来一个硬菜&#xff1a;移动端高效魔系符文如何制作&#xff0c;国庆起来&#xff0c;老师抽了点…

汽车免拆诊断案例 | 2013款宝马116i车偶尔加速不良

故障现象  一辆2013款宝马116i车&#xff0c;搭载N13B16A 发动机&#xff0c;累计行驶里程约为12.1万km。车主反映&#xff0c;该车行驶中偶尔加速无反应&#xff0c;且发动机故障灯异常点亮。 故障诊断 接车后试车&#xff0c;故障现象无法再现。用故障检测仪检测&#xff…

RestClient查询文档match查询、精确查询和布尔查询

目录 match查询 精确查询 布尔查询 match查询 全文检索的match和multi_match查询与match_all的API基本一致。差别是查询条件&#xff0c;也就是query的部分。 因此&#xff0c;Java代码上的差异主要是request.source().query()中的参数了。同样是利用QueryBuilders提供的方法…

解决在Windows中安装tensorflow2.10无法检测到GPU的问题

解决在Windows中安装tensorflow2.10无法检测到GPU的问题 官方给出的Windows本地安装方式 更新显卡驱动到最新。安装anaconda或miniconda作为python环境的管理工具。创建新的环境tf&#xff1a;conda create --name tf python3.9&#xff0c;然后进入改环境&#xff1a;conda …

redis的zset实现下滑滚动分页查询思路

常规zset查询 我们redis的数据为 我们知道 我们常规查询的话 我们假如 zset 表中 有7个元素&#xff0c;然后我们进行分页查询的话&#xff0c;我们一次查3个元素&#xff0c;然后查出来元素 和元素的分数 我们redis的语法应该这样写 zrevrangebyscore wang 1000 0 withsc…

目标检测最新SOTA模型D-FINE

2024年10月18号&#xff0c;中科大推出了 D-FINE&#xff0c;这是一款功能强大的实时物体检测器&#xff0c;通过重新定义 DETR 模型中的边界框回归任务实现了出色的定位精度。 摘要 D-FINE 包含两个关键组件&#xff1a;细粒度分布细化 (FDR) 和全局最优定位自蒸馏 (GO-LSD)…