当前位置: 首页 > news >正文

39 矩阵置零

39 矩阵置零

在这里插入图片描述

39.1 矩阵置零解决方案

解题思路

  • 利用第一行和第一列标记
    • 使用两个标记变量,rowZerocolZero,来判断第一行和第一列是否需要置零。
    • 遍历矩阵从(1,1)开始,如果某个元素是0,则标记该行和该列的第一个元素为0.
    • 最后根据标记来处理第一行和第一列。
  • 步骤
    • 遍历矩阵,将遇到0的行和列的第一个元素设置为0.
    • 遍历结束后,根据第一行和第一列的标记,置零相应的位置。
    • 最后特别处理第一行和第一列,依据rowZero和colZero来决定是否置零。
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int m = matrix.size();int n = matrix[0].size();// 标记第一行和第一列是否需要置零bool rowZero = false;bool colZero = false;// 检查第一行是否包含0for(int i = 0 ; i < n ;i++){if(matrix[0][i] == 0){rowZero = true;break;}}// 检查第一行是否包含0for(int i = 0 ; i < m ;i++){if(matrix[i][0] == 0){colZero = true;break;}}// 用第一行和第一列来标记需要置零的行和列for(int i = 1; i < m ; i++ ){for(int j = 1; j < n ; j++){if(matrix[i][j] == 0){matrix[i][0] = 0; // 标记所在行的第一列matrix[0][j] = 0; // 标记所在列的第一行}}}for(int i = 1; i < m ; i++ ){for(int j = 1; j < n ; j++){if(matrix[i][0] == 0 || matrix[0][j] == 0){matrix[i][j] = 0;}}}// 处理第一行是否需要置零if(rowZero){for(int i = 0; i < n; i++){matrix[0][i] = 0;}}// 处理第一列是否需要置零if(colZero){for(int i = 0; i < m ; i++){matrix[i][0] = 0;}}}
};

代码解释

  • 标记第一行和第一列
    • 先通过两个标记变量rowZero和colZero来记录第一行和第一列是否需要置零。
    • 遍历整个矩阵,如果某个元素是0 ,则将其对应的第一行和第一列元素置为0,表示这一行和这一列都需要被置零。
  • 根据标记置零
    • 第二次遍历矩阵(从(1,1)开始),根据第一行和第一列的标记,把相应的元素置为0.
  • 处理第一列和第一行
    • 最后,检查rowZero和colZero,如果需要,就把第一行和第一列的所有元素置为0.

时间复杂度和空间复杂度

  • 时间复杂度 O ( m ∗ n ) O(m * n ) O(mn),其中m 和 n 是矩阵的行数和列数。我们遍历了矩阵几次,每次遍历都是 O ( m ∗ n ) O(m * n) O(mn)的时间复杂度。
  • 空间复杂度 O ( 1 O(1 O(1,因为我们只用了常数空间(除了原矩阵)。

39.2 举例说明

假设有以下矩阵:

1  2  3
4  0  6
7  8  9
  • 初始化标记

    • rowZero:用来判断第一行是否需要置零。
    • colZero:用来判断第一列是否需要置零。
      初始状态
  • rowZero = false (假设第一行不需要置零)

  • colZero = false (假设第一行不需要置零)

  • 检查第一行和第一列是否包含零

    • 检查第一行
      • 第一行是1 2 3 ,没有0,因此rowZero不变,仍然为false。
    • 检查第一列
      • 第一列是1 4 7,没有 0,因此colZero不变,仍然为false。
  • 使用第一行和第一列标记需要置零的行和列
    矩阵如下:

1  2  3
4  0  6
7  8  9
  • 遍历(1,1):值是0,因此我们将martix[1][0]martix[0][1]都置为0,表示第二行和第二列需要置零。此时矩阵变为:
1  2  3
0  0  6
7  8  9
  • 遍历 (1,2):值是 6,不需要做任何操作。
  • 遍历 (2,1):值是 7,不需要做任何操作。
  • 遍历 (2,2):值是 8,不需要做任何操作。

矩阵变为:

1  2  3
0  0  6
7  8  9
  • 根据标记置零
    • 处理第二行
      • 因为martix[1][0]0,所以整个第二行需要置零。矩阵变为:
      1  2  3
      0  0  0
      7  8  9
      
    • 处理第三例
      • 因为 matrix[0][2]0,所以整个第三列需要置零。矩阵变为:
      1  2  0
      0  0  0
      7  8  0
      
  • 处理第一行和第一列
    • 处理第一行
      • 由于rowZero = false,第一行不需要置零,因此保持不变。
    • 处理第一列
      • 由于colZero = false,第一列不需要置零,因此也保持不变。
        最终矩阵
1  2  0
0  0  0
7  8  0

相关文章:

39 矩阵置零

39 矩阵置零 39.1 矩阵置零解决方案 解题思路&#xff1a; 利用第一行和第一列标记&#xff1a; 使用两个标记变量&#xff0c;rowZero和colZero&#xff0c;来判断第一行和第一列是否需要置零。遍历矩阵从(1,1)开始&#xff0c;如果某个元素是0&#xff0c;则标记该行和该列…...

使用伪装IP地址和MAC地址进行Nmap扫描

使用伪装IP地址和MAC地址进行Nmap扫描 在某些网络设置中&#xff0c;攻击者可以使用伪装的IP地址甚至伪装的MAC地址进行系统扫描。这种扫描方式只有在可以保证捕获响应的情况下才有意义。如果从某个随机的网络尝试使用伪装的IP地址进行扫描&#xff0c;很可能无法接收到任何响…...

linux安装docker和mysql

1.下载安装doker 1. 更新系统,确保系统是最新的 sudo yum update -y2.安装 Docker 所需的依赖包&#xff1a; sudo yum install -y yum-utils 2. 设置 Docker 仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 3. 安装 Dock…...

贪心算法专题(四)

目录 1. 单调递增的数字 1.1 算法原理 1.2 算法代码 2. 坏了的计算器 2.1 算法原理 2.2 算法代码 3. 合并区间 3.1 算法原理 3.2 算法代码 4. 无重叠区间 4.1 算法原理 4.2 算法代码 5. 用最少数量的箭引爆气球 5.1 算法原理 ​5.2 算法代码 1. 单调递增的数字…...

QT 多级嵌套结构体,遍历成员--半自动。<模板+宏定义>QTreeWidget树结构显示

Qt的QTreeWidget来显示嵌套结构体的成员&#xff0c;并以树形结构展示。 #include <QApplication> #include <QTreeWidget> #include <QTreeWidgetItem> #include <QString> #include <cstdint>// 假设这些是你的结构体定义 struct BaseMeterPa…...

NLP-中文分词

中文分词 1、中文分词研究背景及意义 和大部分西方语言不同&#xff0c;书面汉语的词语之间没有明显的空格标记&#xff0c;句子是以字串的形式出现。因此对中文进行处理的第一步就是进行自动分词&#xff0c;即将字串转变成词串。 比如“中国建筑业呈现新格局”分词后的词串…...

详解LeetCode地下城游戏(动态规划)——区分两种状态表示形式

地下城游戏 题目链接&#xff1a;174. 地下城游戏 状态表示&#xff1a; 按照以往题的表示&#xff0c;dp[i][j]表示&#xff1a;从起点&#xff08;0&#xff0c;0&#xff09;位置到达&#xff08;i&#xff0c;j&#xff09;位置时&#xff0c;所需的最小初始健康值。但是…...

.NET正则表达式

正则表达式提供了功能强大、灵活而又高效的方法来处理文本。 正则表达式丰富的泛模式匹配表示法使你可以快速分析大量文本&#xff0c;以便&#xff1a; 查找特定字符模式。 验证文本以确保它匹配预定义模式&#xff08;如电子邮件地址&#xff09;。 提取、编辑、替换或删除…...

k8s 为什么需要Pod?

Pod&#xff0c;是 Kubernetes 项目中最小的 API 对象&#xff0c;更加专业的说&#xff0c;Pod&#xff0c;是 Kubernetes 项目的原子调度单位。 Pod 是 Kubernetes 里的原子调度单位。这就意味着&#xff0c;Kubernetes 项目的调度器&#xff0c;是统一按照 Pod 而非容器的资…...

CV(3)--噪声滤波和特征

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 图像噪声&#xff08;需要主动干扰的场景&#xff09;&#xff1a; 添加高斯噪声&#xff1a;概率密度函数服从高斯分布的一类噪声 通过设置sigma和mean生成符合高斯分布的随机数&#xff0c;然后计算输出像素&#xff0c;放缩…...

LDR6500:音频双C支持,数字与模拟的完美结合

在当今数字化快速发展的时代&#xff0c;音频设备的兼容性和性能成为了用户关注的重点。LDR6500&#xff0c;作为乐得瑞科技精心研发的USB Power Delivery&#xff08;PD&#xff09;协议芯片&#xff0c;凭借其卓越的性能和广泛的应用兼容性&#xff0c;为音频设备领域带来了新…...

python web app开发

背景: web app VS 本地GUI开发 web app开发以来一直被人诟病性能,无法访问本地设备,无状态的等缺点而被迫转向本地GUI开发;但本地开发如C++ QT,MFC,WinForm等开发结构又太重,使人望而生畏。web app有个有点就…...

redis数据结构和内部编码及单线程架构

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. 数据结构和内部编码 Redis会在合适的场景选择合适的内部编码 我们可以通过objectencoding命令查询内部编码 : 2. 单线程架构 …...

【unity小技巧】分享vscode如何进行unity开发,且如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)

文章目录 前言一、前置条件1、已安装Visual Studio Code&#xff0c;并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号]&#xff0c;2、在Visual Studio Code扩展中搜索Unity&#xff0c;并安装3、同时注意这个插件下面的描述&#xff0c;需要根…...

AI大模型学习笔记|人工智能的发展历程、智能体的发展、机器学习与深度学习的基本理论

学习链接&#xff1a;冒死上传&#xff01;价值2W的大模型入门到就业教程分享给大家&#xff01;轻松打造专属大模型助手&#xff0c;—多模态、Agent、LangChain、ViT、NLP_哔哩哔哩_bilibili 百度网盘自己整理的笔记&#xff1a; 通过网盘分享的文件&#xff1a;1-人工智能的…...

C#实现一个HttpClient集成通义千问-多轮对话功能实现

多轮对话功能实现 视频教程实现原理消息的类型 功能开发消息类修改请求体修改发送请求函数修改用户消息输入 多轮对话的token消息完整文档消息类型 视频教程 .NetAI开发入门HttpClient实现通义千问集成-多轮对话功能实现 实现原理 一直保留更新messages 现在设置的meessages只…...

Java Web 7 请求响应(Postman)

前言&#xff08;SpringBoot程序请求响应流程&#xff09; 以上一章的程序为例&#xff0c;一个基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello World ~”。 而我们在开发web程序时呢&#xff0c;定义了一…...

Android APP自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;本来想直接删除掉的&#xff0c;但是感觉有些舍不得&#xff0c;因此先搬移过来。 Android导入已有外部数据库 2015.06.26在QQ空间记录&#xff1a;在Android中不能直接打开res aw目录中的数据…...

Linux 系统报打开的文件过多

1.问题 1804012290 [reactor-http-epoll-1] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. - io.nett…...

javaWeb之过滤器(Filter)

目录 前言 过滤器概述 什么是过滤器 过滤器详细 过滤器的生命周期 过滤器的应用 创建一个简单的Filter类步骤 注意&#xff1a;指定拦截路径&#xff0c;我们有两种方式 实例 前言 本篇博客的核心 知道过滤器的整个拦截过程知道如何指定拦截路径知道过滤器的生命周期…...

GPU云服务器选型指南:从核心参数到实际部署的深度解析

在当下人工智能跟高性能计算急剧速度发展状况里&#xff0c;GPU云服务器正沿着从专业领域迈向更为广泛应用场景的路径前行。对于构成企业的开发者、相关技术团队来讲&#xff0c;怎样精准无误理解这一技术方案所具备的本质&#xff0c;并且于实际选型期间做出合乎情理的判断&am…...

Mali-400 MP OpenGL ES DDK核心问题与解决方案

## 1. Mali-400 MP OpenGL ES DDK核心问题解析作为ARM经典的移动GPU架构&#xff0c;Mali-400 MP在Symbian平台的OpenGL ES驱动开发套件(DDK)中存在三类典型问题。这些问题的根源往往涉及GPU硬件特性与图形API规范的微妙交互&#xff0c;开发者需要深入理解其底层机制才能有效规…...

CSS 视图过渡完全指南

CSS 视图过渡完全指南 引言 CSS 视图过渡&#xff08;View Transitions&#xff09;是一个强大的新特性&#xff0c;它允许开发者创建平滑的页面过渡动画。本文将深入探讨视图过渡的各种用法和高级技巧。 基础概念回顾 什么是视图过渡 视图过渡 API 允许你在 DOM 状态变化时创建…...

离散数学“黑话”指南:命题、谓词、群论,一次讲清程序员常遇到的术语

离散数学“黑话”指南&#xff1a;程序员视角下的概念破译 刚接触算法优化时&#xff0c;我盯着论文里的"幺半群"概念发愣——这和我在代码里写的if-else有什么关系&#xff1f;直到某天用状态机处理用户权限时突然顿悟&#xff1a;原来离散数学的抽象术语&#xff0…...

云雾栖茶山,在云顶山读懂一片茶叶的蜕变旅程

位于福建省安溪县西坪镇的云顶山茶园&#xff0c;是一处融合了茶叶种植与传统制茶工艺的生态旅游区。该区域海拔约800米&#xff0c;常年云雾缭绕&#xff0c;土壤富含矿物质&#xff0c;为茶树生长提供了适宜的自然条件。景区以乌龙茶种植为核心&#xff0c;围绕“从叶片到茶杯…...

大模型选型生死局(企业CTO私藏对比清单):Claude在长文档法律分析胜出32%,Gemini在实时多跳检索快4.8倍——你的业务该选谁?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;大模型选型生死局&#xff1a;Claude vs Gemini核心能力全景图 在企业级AI应用落地的关键阶段&#xff0c;模型选型已远非单纯比拼参数量或基准分数&#xff0c;而是对推理鲁棒性、上下文工程适配度、多…...

Midjourney v7新功能全维度压测报告(v6 vs v7实测对比:提示词容错率↑47%,构图理解准确率突破92.6%)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney v7新功能全面解析 Midjourney v7 于2024年第三季度正式发布&#xff0c;标志着AI图像生成在语义理解、构图控制与跨模态一致性方面迈入新阶段。本次升级不再仅依赖提示词&#xff08;prompt…...

3步实现电脑风扇智能控制:FanControl.HWInfo插件终极指南

3步实现电脑风扇智能控制&#xff1a;FanControl.HWInfo插件终极指南 【免费下载链接】FanControl.HWInfo FanControl plugin to import HWInfo sensors. 项目地址: https://gitcode.com/gh_mirrors/fa/FanControl.HWInfo 还在为电脑风扇的噪音烦恼吗&#xff1f;或者担…...

航拍UAV电力电缆巡检检测数据集_数据集第10027期

航拍UAV电力电缆巡检检测数据集_数据集第10027期 项目简介 面向无人机电力巡检场景的开源目标检测数据集&#xff0c;聚焦电力电缆识别任务&#xff0c;可用于电力线检测、植被与电力线安全距离监测等场景&#xff0c;助力电力巡检智能化。 数据集核心信息 数据规模&#xff1a…...

GTX 1660实战AI视频生成:低显存环境下的模型瘦身与帧插值方案

1. 项目概述&#xff1a;在入门级显卡上跑通AI视频生成最近看到不少朋友对AI视频生成很感兴趣&#xff0c;但总被“需要RTX 4090”、“至少24GB显存”这类硬件门槛劝退。作为一个常年混迹于“丐版”硬件圈的老玩家&#xff0c;我决定用我手头这块服役多年的GTX 1660&#xff08…...