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

力扣HOT100之矩阵:73. 矩阵置零


这道题我没有想到什么好的办法,直接暴力AC了,直接遍历两次矩阵,第一次遍历用两个向量分别记录出现0的行数和列数,第二次遍历就判断当前的元素的行数或者列数是否出现在之前的两个向量中,若出现了就直接置零,否则就跳过。后面看了下空间复杂度为O(1)的解法,感觉这个思路不错,记录一下。
我们可以将第0行和第0列作为记录的标志位,例如matrix[5][6] == 0,我们就将matrix[0][6]matrix[5][0]置为0,经过一次遍历后,除了第0行和第0列的情况没有统计出来,其余的行和列都已经遍历结束并且打上标签,由于打标签会向第0行和第0列添加0,打完标签后无法判断其本身原本就包含0,因此在遍历矩阵打标签之前,我们需要遍历矩阵的第0行和第0列,如果他们本身就有0,我们就分别用两个变量记录下来,至此,我们先分别遍历了矩阵的第0行和第0列,再遍历了矩阵的其余行和列,这就遍历了一次矩阵,我们再遍历一次矩阵,从下标为1的行和列开始,对于matrix[i][j],如果matrix[0][j] == 0matrix[i][0] == 0,我们就直接将matrix[i][j]置零。遍历结束后,我们还需要对第0行和第0列进行处理,如果他们原本就包含0,则将整行或整列直接置零。这里依然是遍历两次数组,但是由于只进行了比较操作,而没有进行查找操作,程序耗时要比我之前暴力AC短得多。
下面分别是暴力AC代码(空间复杂度O(m + n))和空间复杂度O(1)的代码。

//暴力代码
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {vector<int> row;vector<int> column;for(int i = 0; i < matrix.size(); ++i){for(int j = 0; j < matrix[i].size(); ++j){if(matrix[i][j] == 0){row.emplace_back(i);column.emplace_back(j);}}}for(int i = 0; i < matrix.size(); ++i){for(int j = 0; j < matrix[i].size(); ++j){if(find(row.begin(), row.end(), i) == row.end() && find(column.begin(), column.end(), j) == column.end())continue;matrix[i][j] = 0;}}}
};
//空间复杂度O(1)代码
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {bool row_flag0 = false;   //判断第0行有没有0bool column_flag0 = false;  //判断第0列有没有0//遍历第0行for(int i = 0; i < matrix[0].size(); ++i){if(matrix[0][i] == 0){row_flag0 = true;break;}}//遍历第0列for(int i = 0; i < matrix.size(); ++i){if(matrix[i][0] == 0){column_flag0 = true;break;}}//遍历整个矩阵,在第0行和第0列标记0元素的分布情况for(int i = 1; i < matrix.size(); ++i){for(int j = 1; j < matrix[i].size(); ++j){if(matrix[i][j] == 0){matrix[i][0] = 0;  //在第0列的对应位置置零matrix[0][j] = 0;  //在第0行的对应位置置零}}}//开始置零for(int i = 1; i < matrix.size(); ++i){for(int j = 1; j < matrix[i].size(); ++j){if(matrix[i][0] == 0 || matrix[0][j] == 0)matrix[i][j] = 0;  }}//判断在打标记之前第0行本身有没有0if(row_flag0){for(int i = 0; i < matrix[0].size(); ++i)matrix[0][i] = 0;}//判断在打标记之前第0列本身有没有0if(column_flag0){for(int i = 0; i < matrix.size(); ++i)matrix[i][0] = 0;}}
};

相关文章:

力扣HOT100之矩阵:73. 矩阵置零

这道题我没有想到什么好的办法&#xff0c;直接暴力AC了&#xff0c;直接遍历两次矩阵&#xff0c;第一次遍历用两个向量分别记录出现0的行数和列数&#xff0c;第二次遍历就判断当前的元素的行数或者列数是否出现在之前的两个向量中&#xff0c;若出现了就直接置零&#xff0c…...

天锐蓝盾终端安全防护——企业终端设备安全管控

从办公室的台式电脑到员工手中的移动终端&#xff0c;这些设备不仅是工作的得力助手&#xff0c;更是企业数据的重要载体。然而&#xff0c;随着终端设备的广泛使用&#xff0c;安全风险也如影随形。硬件设备使用不当、数据随意传输等问题频发&#xff0c;使得企业数据面临着泄…...

【博客】使用GithubAction自动同步obisidian和hexo仓库

使用Github Action自动同步obisidian和hexo仓库&#xff0c;避免手动操作。 本文首发于❄慕雪的寒舍 1. 烦恼 先来说说慕雪现在的笔记和博客是怎么管理的吧&#xff0c;我正在使用两套笔记软件 思源笔记&#xff1a;私密性高一些&#xff0c;不是博客的笔记都在这里面。由于思…...

UE5学习笔记 FPS游戏制作23 区分敌我,寻找敌对角色

文章目录 方法1 tag方法2 变量添加变量和函数防止队友伤害 修改Task使用球形检测查找敌人场景面板直接编辑属性 方法1 tag 角色蓝图身上有一个tag标签&#xff0c;可以通过标签内容区分队伍 通过ActorHasTag判断一个Actor是否有对应的标签 方法2 变量 添加变量和函数 在s…...

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…...

AI基础03-视频数据采集

上篇文章我们学习了图片的数据采集&#xff0c;今天主要了解一下视频数据采集的方法。视频是由一系列图像构成的&#xff0c;其中每一张图片就是一帧。视频数据采集方法通常有自动图像采集和基于处理器的图像采集两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行…...

docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警

目录 一.docker-compose文件 二.配置文件 三.文件层级关系&#xff0c;docker-compose和配置文件位于同级目录 四.node_exporter页面json文件 五.效果展示 prometheusalertmanager邮件告警 grafana面板效果 六.涉及离线包 一.docker-compose文件 [rootsulibao prometh…...

CPM:大规模生成式中文预训练语言模型

摘要 预训练语言模型&#xff08;PLMs&#xff09;已被证明对各种下游自然语言处理&#xff08;NLP&#xff09;任务有益。最近&#xff0c;GPT-3 以 1750 亿参数和 570GB 训练数据引起了广泛关注&#xff0c;因为它具备少样本&#xff08;甚至零样本&#xff09;学习的能力。…...

k8s scheduler几种扩展方式的关系及区别

网上关于scheduler扩展介绍的文章很多&#xff0c;但都是东说一句西说一嘴&#xff0c;完全没有逻辑性&#xff0c;对于逻辑建构者看着很痛苦&#xff0c;这篇文章不会深入教你怎么扩展&#xff0c;而是教你几种扩展方式的关系和逻辑结构&#xff1a; 目前Kubernetes支持五种方…...

Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理

在现代企业级应用开发中&#xff0c;前后端分离已成为主流模式&#xff0c;前端负责界面呈现&#xff0c;后端专注提供 RESTful API 接口。然而&#xff0c;接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3&#xff0c;为开发者…...

前端D3.js面试题及参考答案

目录 解释 D3.js 中 enter ()、update ()、exit () 的作用及典型应用场景 描述数据连接(Data Join)的原理,如何通过 data () 方法实现数据集与 DOM 元素的动态绑定? 如何利用 datum () 实现单个元素的数据绑定?与 data () 有何区别? 在动态数据更新时,如何通过 merge…...

Docker实现MySQL主从复制配置【简易版】

Docker实现MySQL主从复制配置 环境准备 安装docker 拉取MySQL 8.0镜像 docker pull mysql:8.0#检查 docker images | grep mysql代码流程 由于Mysql8.0的ssl验证十分繁琐&#xff0c;在创建容器的时候一定要禁掉 创建自定义网络 docker network create mysql-replication-ne…...

IDEA中打开项目Vue+Vue基本语法

一、IDEA中打开项目 1.IDEA中安装Vue基本插件 2.项目结构 项目根目录 node_modules : npm 加载的项目依赖模块 public : 存放静态资源&#xff0c;如图片、视频等。 src : 项目源码目录&#xff0c;包含主要的开发文件。 index.html : 首页入口文件&#xff0c;可以添…...

【深度学习新浪潮】图像修复(Image Inpainting)技术综述:定义、进展与应用展望

本文为精简版,完整技术细节与参考文献可与作者讨论。 1. 图像修复的定义与核心目标 图像修复(Image Inpainting)是一种通过算法手段填补图像中缺失区域或移除不需要对象的技术,其核心目标是利用图像上下文信息生成与周围像素一致且视觉自然的内容。该技术通过计算机视觉和…...

【实战】解决图片 Hover 抖动问题的完整指南

在开发网站时&#xff0c;很多人都会遇到一个常见问题&#xff1a;鼠标移动到图片上&#xff0c;图片放大&#xff0c;结果发生抖动或闪烁。这个问题往往伴随着后端接口请求、JS 动态追加 DOM 等复杂行为。 本文将深入剖析这个问题的成因&#xff0c;并提供一套彻底的解决方案…...

java容器

一、List 接口实现类 1. ​ArrayList 特性:基于动态数组实现,支持快速随机访问(时间复杂度 O(1)),但插入/删除元素时需移动后续元素(时间复杂度 O(n)) 一、核心方法分类 ​添加元素 add(E e):尾部追加元素,均摊时间复杂度O(1)add(int index, E element):指定位置插入…...

arthas之jvm相关命令

文章目录 1. dashboard2. thread线程相关3. jvmTHREAD相关文件描述符相关 4. sysprop5. 小结6. sysenv7. vmoption8. getstatic9. ognl10. 小结 1. dashboard 作用&#xff1a;显示当前系统的实时数据面板&#xff0c;按q或ctrlc退出 数据说明 ID: Java级别的线程ID&#xff…...

UDP视频传输中的丢包和播放花屏处理方法

在处理UDP视频传输中的丢包和花屏问题时,需要结合编码优化、网络传输策略和接收端纠错技术。以下是分步骤的解决方案: 1. 前向纠错(FEC,Forward Error Correction) 原理:在发送数据时附加冗余包,接收方通过冗余信息恢复丢失的数据包。 实现方法: 使用Reed-Solomon、XO…...

蓝桥杯 班级活动

问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名同学&#xff08;n 为偶数&#xff09;&#xff0c;老师想把所有同学进行分组&#xff0c;每两名同学一组。 为了公平&#xff0c;老师给每名同学随机分配了一个 n 以内的正整数作为 id&#xff0c;第 i 名同学的 i…...

Open webui的使用

问题 之前本地量化模型管理器ollama的文章&#xff0c;我们知道可以通过ollama来管理本地量化模型&#xff0c;也能够在命令行中与相关模型进行对话。现在我们想要在有个web页面通过浏览器来与本地模型对话。这里我们就使用Open webui作为界面来与本地模型对话。 安装启动 这…...

页面重构过程中如何保证良好的跨浏览器一致性?

在页面重构的过程中&#xff0c;为了确保网页能够在不同的浏览器中呈现一致的效果&#xff0c;我们需要采取一系列措施来提高跨浏览器的一致性。以下是几个关键步骤和技术要点&#xff1a; 使用标准化的HTML和CSS&#xff1a;始终遵循最新的Web标准编写代码&#xff0c;例如采用…...

Python库与Excel

目录 一、库 1、Python自带的库 2、第三方库 3、第三方库的安装 二、import的用法 三、datetime库 1、处理日期 2、处理时刻 3、局限性 四、random库 1、函数 2、随机种子 3、发牌模拟器 五、jieba库 六、openpyxl库 1、表格读取 2、表格元素遍历 3、工作表的…...

记录一下最近参与实习 外包 社招流程里的一些感悟

记录一下最近参与实习 外包 社招流程里的一些感悟 1.简历门面要重视 1.简历非常重要&#xff0c;它是你的门面 初步了解到你的一个实习/工作经历&#xff0c;然后掌握的技术栈&#xff0c;是否与当前项目匹配&#xff0c;哪些模块上的设计是我们想要重点关注的&#xff0c;可…...

流动的梦境:GPT-4o 的自回归图像生成深度解析

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

HarmonyOS NEXT开发进阶(十四):HarmonyOS应用开发者基础认证试题集汇总及答案解析

文章目录 一、前言二、判断题&#xff08;134道&#xff09;三、单选题&#xff08;210道&#xff09;四、多选题&#xff08;123道&#xff09;五、拓展阅读 一、前言 鸿蒙原生技能学习阶段&#xff0c;通过官方认证的资格十分有必要&#xff0c;在项目实战前掌握基础开发理论…...

Visual Studio Code(简称 VS Code)下载与使用教程1(新建文件,语法高亮,快捷键,主题,快捷指令)

简介 由 微软&#xff08;Microsoft&#xff09; 开发的 免费、开源、跨平台 的 代码编辑器&#xff0c;广泛用于编程开发、文本编辑和调试。 主要功能 代码编辑&#xff1a;支持几乎所有编程语言&#xff08;Python、JavaScript、Java、C、Go 等&#xff09;&#xff0c;提供…...

3.28前端模拟面试

针对你 1.5 年的前端经验&#xff0c;结合 Vue 3、TypeScript、微前端&#xff08;qiankun&#xff09;等背景&#xff0c;我准备了一套模拟面试题&#xff0c;偏向场景化问题&#xff0c;考察你的实战经验和思维能力。 一、工程化 & 架构 你们的前端项目使用 qiankun 做微…...

pip 安装某个包之后,Jupyter Lab仍旧显示包冲突;例如:Numba needs NumPy 2.1 or less. Got NumPy 2.2.

异常提示 Numba needs NumPy 2.1 or less. Got NumPy 2.2. --------------------------------------------------------------------------- ImportError Traceback (most recent call last) Cell In[8], line 53 import pywt4 import matplot…...

Python:爬虫概念与分类

网络请求&#xff1a; https://www.baidu.com url——统一资源定位符 请求过程&#xff1a; 客户端&#xff0c;指web浏览器向服务器发送请求 请求&#xff1a;请求网址(request url)&#xff1b;请求方法(request methods)&#xff1b;请求头(request header)&…...

flask开发中设置Flask SQLAlchemy 的 db.Column 只存储非负整数(即 0 或正整数)

如果你想控制一个 Flask SQLAlchemy 的 db.Column 只存储非负整数&#xff08;即 0 或正整数&#xff09;&#xff0c;你可以在模型中使用验证来确保这一点。一种常见的方法是使用模型的 validate 方法或者在执行插入或更新操作时进行检查。 以下是实现这一目标的几种方法&…...

从0到1解决项目问题经验-Vue3前端

问题1&#xff1a; 我有文件里面这么一段代码&#xff0c;但是现在有个问题&#xff0c;就是在设备信息详情的抽屉页面中&#xff0c;当我首次点击查看的时候&#xff0c;显示的物流中心名称现在是跟"deviceInfo.logisticsCenterName"做的绑定&#xff0c;于是现在显…...

Vue.js的CSS过渡与动画:常用案例解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

【论文阅读】Co2l: Contrastive continual learning

原文链接&#xff1a;[2106.14413] Co$^2$L: Contrastive Continual Learning 阅读本文前&#xff0c;需要对持续学习的基本概念以及面临的问题有大致了解&#xff0c;可参考综述&#xff1a; Wang L, Zhang X, Su H, et al. A comprehensive survey of continual learning: …...

Python给对象数组排序

文章目录 1. 使用sorted()函数&#xff08;返回新的排序后的列表&#xff09;2. 使用list.sort()方法&#xff08;原地排序&#xff0c;不返回新列表&#xff09;3. 如果数据结构是集合&#xff08;set&#xff09;&#xff0c;集合本身是无序的&#xff0c;无法直接排序&#…...

Docker-清理容器空间prune

docker system prune -a 是一个非常有用的命令&#xff0c;用于清理 Docker 系统中未使用的资源&#xff0c;包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像&#xff08;悬空镜像和所有未使用的镜像&#xff09;。以下是关于该命令的详细说明&#xff1a; 命令…...

Kubernetes》》K8S》》Deployment 、Pod、Rs 、部署 nginx

Deployment deployment文档说明 kubectl get rs,deployment,pods 删除pod 、deployment 、service # 如果只删除pod&#xff0c;deployment会自动重建&#xff0c;所以应该先删除deployment。 # 下面演示的是删除所有deployment&#xff0c;可以指定只删除某个 # 删除所有…...

【Zookeeper搭建】Zookeeper分布式集群搭建完整指南

Zookeeper分布式集群搭建 &#xff08;一&#xff09;克隆前准备工作 一、时钟同步 步骤&#xff1a; 1、输入date命令可以查看当前系统时间&#xff0c;可以看到此时系统时间为PDT&#xff08;部分机器或许为EST&#xff09;&#xff0c;并非中国标准时间。我们在中国地区…...

基于YOLO11/WVP的电梯系统开发-模型训练与rk3568移植

1. 环境准备 代码下载&#xff1a; https://github.com/ultralytics/ultralytics.git切换到 8.3.0 以上的分支&#xff0c;yolov11 只在上述分支支持, 下载后在 ultralytics 根目录下安装 yolo 依赖环境&#xff1a; pip install -e . -i https://pypi.tuna.tsinghua.edu.cn…...

[数据结构]并查集(系统整理版)

基础用法 int p[N];//路径压缩 寻找祖宗节点 int find(int x){if(p[x]!x) p[x]find(p[x]);return p[x]; }int main(){ //初始化for(int i1;i<n;i) p[i]i; }合并 void merge(int a,int b){int aafind(a),bbfind(bb);if(aa!bb){p[aa]bb;} }查询是否联通 bool is_connected(…...

人工智能与软件工程结合的发展趋势

AI与软件工程的结合正在深刻改变软件开发的流程、工具和方法&#xff0c;其发展方向涵盖了从代码生成到系统维护的整个生命周期。以下是主要的发展方向和技术趋势&#xff1a; 1. 软件架构体系的重构 从“面向过程”到“面向目标”的架构转型&#xff1a; AI驱动软件设计以目标…...

Compose 实践与探索十七 —— 多指手势与自定义触摸反馈

上一节我们讲了滑动的手势识别以及嵌套滑动&#xff0c;二者都属于触摸反馈这个大的范畴内的知识。本节我们将深入触摸反馈这个话题&#xff0c;讲一讲多指手势的识别与完全自定义的触摸反馈的实现。 1、多指手势 多指手势可以分为两类&#xff1a; 利用 API 处理预设好的手…...

哈希表 - 两个数组的交集(集合、数组) - JS

一、Set基础 在 JavaScript 中&#xff0c;Set 是一种集合&#xff08;Collection&#xff09;​数据结构&#xff0c;用于存储唯一值​&#xff08;不允许重复&#xff09;&#xff0c;并且可以高效地进行添加、删除、查询等操作。它类似于数组&#xff08;Array&#xff09;…...

26_ajax

目录 了解 接口 前后端交互 一、安装服务器环境 nodejs ajax发起请求 渲染响应结果 get方式传递参数 post方式传递参数 封装ajax_上 封装ajax下 了解 清楚前后端交互就可以写一些后端代码了。小项目 现在写项目开发的时候都是前后端分离 之前都没有前端这个东西&a…...

Java面试黄金宝典24

1. 什么是跳表 定义 跳表&#xff08;Skip List&#xff09;是一种随机化的数据结构&#xff0c;它基于有序链表发展而来&#xff0c;通过在每个节点中维护多个指向其他节点的指针&#xff0c;以多层链表的形式组织数据。其核心思想是在链表基础上增加额外层次&#xff0c;每…...

每日c/c++题 备战蓝桥杯(全排列问题)

题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列&#xff0c;即 n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列&#xff0c;每行一个序列。 每个数字保留 5 个场…...

Layui实现table动态添加行,可删除、表格可编辑,小数校验

实现如图需求&#xff0c;layui实现的可编辑table&#xff0c;包含B、C、D、E列&#xff0c;A列不用实现出现&#xff0c;A列放在附件就是让你明白&#xff0c;不同的物料名称&#xff0c;行是不一样的。除了头部表头和E列不能编辑&#xff0c;每个表格都可编辑&#xff0c;其中…...

Spring Boot 非web应用程序

​​​​​在 Spring Boot 框架中&#xff0c;要创建一个非Web应用程序&#xff08;纯Java程序&#xff09; main方法运行&#xff0c;不启动tomcat&#xff0c;main方法执行结束&#xff0c;程序就退出了&#xff1b; 方式一 1、SpringBoot开发纯Java程序&#xff0c;应该采…...

数据分析中的基线校正算法全解析:原理、实现与应用

数据分析中的基线校正算法全解析:原理、实现与应用 在数据分析中,基线漂移是一个常见问题,会严重影响数据的解释和分析精度。本文将详细介绍12种主流基线校正方法,包括数学原理、Python实现代码和适用场景分析。 基线漂移问题概述 基线漂移主要由以下因素引起: 仪器强度…...

国外计算机证书推荐(考证)(6 Sigma、AWS、APICS、IIA、Microsoft、Oracle、PMI、Red Hat)

文章目录 证书推荐1. 六西格玛 (6 Sigma)2. 亚马逊网络服务 (AWS)3. 美国生产与库存控制学会 (APICS)4. 内部审计师协会 (IIA)5. 微软 (Microsoft)6. 甲骨文 (Oracle)7. 项目管理协会 (PMI)8. 红帽 (Red Hat) 证书推荐 1. 六西格玛 (6 Sigma) 介绍&#xff1a;六西格玛是一种…...

linux》》docker 、containerd 保存镜像、打包tar、加载tar镜像

Linux》》docker: 默认情况下&#xff0c;Docker镜像保存在/var/lib/docker/目录下。 当您使用docker pull命令从Docker Hub或私有镜像仓库中拉取镜像时&#xff0c;Docker会自动将镜像文件保存在/var/lib/docker/image/目录下。 每个镜像都由一个或多个层组成&#xff0c;这些…...