当前位置: 首页 > 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;我们有两种方式 实例 前言 本篇博客的核心 知道过滤器的整个拦截过程知道如何指定拦截路径知道过滤器的生命周期…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...