发布时间:2026/8/26 16:09:11
【矩阵】【中等】矩阵置零 题目给定一个 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]]提示m matrix.lengthn matrix[0].length1 m, n 200-2^31 matrix[i][j] 2^31 - 1进阶一个直观的解决方案是使用 O(mn) 的额外空间但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m n) 的额外空间但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗方法一复制矩阵复制一样大小和内容的矩阵copy[m][n]如果copy[i][j] 0那么就把原矩阵中的第i行、第j列置零此时的额外空间是O(mn)注意不能直接一边扫描、一边把原矩阵改成 0例如矩阵[1,1,1],[1,0,1],[1,1,1]扫描到中间的时候将行和列都设置为 0变为下面的矩阵[1,0,1],[0,0,0],[1,0,1]这是时候后续扫描到第三行第二列的时候数值也为 0但是它是刚才置零产生不是原有的 0publicstaticvoidsetZeroes(int[][]matrix){//int[][] copy matrix.clone();浅拷贝修改 matrix 会影响 copyint[][]copynewint[matrix.length][matrix[0].length];for(inti0;imatrix.length;i){copy[i]matrix[i].clone();// 或者 Arrays.copyOf(matrix[i], matrix[i].length)}for(inti0;imatrix.length;i){for(intj0;jmatrix[i].length;j){if(copy[i][j]0){//将第i行和第j列设置为0for(intk0;kmatrix.length;k){matrix[k][j]0;}for(intk0;kmatrix[i].length;k){matrix[i][k]0;}}}}}时间复杂度O(mn(mn))空间复杂度O(mn)方法二记录行和列的清零位置根本没必要保存完整矩阵。因为对于每个 0真正需要记住的信息只有第几行要清零和第几列要清零第一遍扫描记录需要清零的行 rows[] 和列 cols[]第二遍扫描如果属于标记的行/列则清零publicstaticvoidsetZeroes(int[][]matrix){boolean[]rownewboolean[matrix.length];boolean[]colnewboolean[matrix[0].length];for(inti0;imatrix.length;i){for(intj0;jmatrix[0].length;j){if(matrix[i][j]0){row[i]true;col[j]true;}}}for(inti0;imatrix.length;i){for(intj0;jmatrix[0].length;j){if(row[i]||col[j]){matrix[i][j]0;}}}}时间复杂度O(mn)空间复杂度O(mn)方法三第一行和第一列充当标记数组矩阵本身已经有第一行和第一列因此可以替代上面的标记位置。注意需要首先记录原始的第一行第一列中是否有0比如对于下面的矩阵检测到 arr[0][1] 处为0则设置matrix[i][0] 0、 matrix[0][j] 0会污染原来的行列因此第一行第一列只能记录内层是否为0原有的0则需要处理完最后再单独处理[1,0,3][4,5,6][7,8,9]publicstaticvoidsetZeroesO1(int[][]matrix){booleanfirstRowZerofalse;booleanfirstColZerofalse;//需要首先记录原始的第一行第一列中是否有0for(inti0;imatrix.length;i){if(matrix[i][0]0){firstColZerotrue;}}for(intj0;jmatrix[0].length;j){if(matrix[0][j]0){firstRowZerotrue;}}//内部0的处理for(inti1;imatrix.length;i){for(intj1;jmatrix[i].length;j){if(matrix[i][j]0){matrix[i][0]0;matrix[0][j]0;}}}for(inti1;imatrix.length;i){for(intj1;jmatrix[i].length;j){if(matrix[i][0]0||matrix[0][j]0){matrix[i][j]0;}}}//对第一行和第一列进行处理if(firstRowZero){for(intj0;jmatrix[0].length;j){matrix[0][j]0;}}if(firstColZero){for(inti0;imatrix.length;i){matrix[i][0]0;}}}时间复杂度O(mn)空间复杂度O(1)

相关新闻

2026/8/26 16:09:11

SAP UI5 里有没有 RxJS mergeMap 的等价物,从事件机制、Promise 并发到 OData V4 批处理的完整对照

在一个典型的 SAP Fiori 页面里,表格已经拿到一批业务对象,页面随后需要针对每个对象继续读取明细、执行校验、触发一个独立的 OData 操作,或者把多个异步结果陆续写回页面状态。熟悉 RxJS 的开发者看到这种需求,很自然会想到 mergeMap。问题也就落到了一个非常具体的位置,…

2026/8/26 16:09:11

免终端:用Platypus三步把脚本打包成macOS应用

免终端:用Platypus三步把脚本打包成macOS应用 【免费下载链接】Platypus Create native macOS applications from command line scripts. 项目地址: https://gitcode.com/gh_mirrors/pl/Platypus 你写完了一个处理文件的脚本,但需要用它的同事从没…

2026/8/26 16:09:11

大模型降智是错觉还是事实,多维度对比告诉你答案

是模型变笨了,还是我们的感觉出了错? 最近社区里关于“大模型降智”的讨论热度居高不下。很多开发者都有类似的体感:明明上周还能完美解决的复杂逻辑题,这周再问却得到了一个敷衍甚至错误的回答。这种落差感让人不禁怀疑&#xf…

2026/8/26 17:00:05

Hadoop 分布式集群实战 2—— Hadoop 高可用架构

1 HDFS‑HA 核心组件 2 台 NameNode Active NameNode:对外处理客户端读写,唯一写元数据Standby NameNode:热备,不接收客户端请求,实时同步元数据,故障时升级为 Active JournalNode 集群(JN&…

2026/8/26 17:00:05

PCA 数据降维:原理、Sklearn 实战与自动选 K

一、为什么需要降维 在机器学习与数据分析中,高维数据(几十甚至几百个特征)会带来诸多挑战。PCA(主成分分析)作为一种经典的线性降维技术,能够有效解决以下痛点: 痛点解决方案维度灾难&#x…

2026/8/26 17:00:05

HoRain云--使用 VS Code 开发 Node.js

Visual Studio Code(简称 VS Code)是微软开发的免费开源代码编辑器, 是目前最受欢迎的 Node.js 开发编辑器之一。 主要优势 内置 Node.js 支持:提供智能代码补全、调试等功能丰富的扩展:可通过扩展市场安装各种 Node…

2026/8/26 17:00:05

系统集成易混淆考点:工作绩效数据、信息、报告怎么分

很多人做软考中级系统集成题时,看到“工作绩效数据、工作绩效信息、工作绩效报告”就头疼。它们看起来都和项目执行情况有关,名字也很像,但考试最喜欢考这种相邻概念:你知道大概意思,但一到选项里就容易选反。尤其在系…

2026/8/26 16:55:04

企业知识库怎样支撑GEO内容生成:字段分层与事实锁设计

企业知识库怎样支撑GEO内容生成:字段分层与事实锁设计 企业资料很多,不等于知识库可用。把公司介绍、产品手册、公众号旧文和销售话术全部扔进一个文件夹,搜索时可能找得到句子,生成内容时却容易把公司名、品牌名、产品名和能力边…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…