LeetCode刷题日志-73矩阵置零

思路一:
用一个同样大小的矩阵记录0的位置,然后遍历矩阵置0,
空间复杂度为O(mn)
class Solution {public void setZeroes(int[][] matrix) {int [][] matrix_new = new int[matrix.length][matrix[0].length];for(int i=0 ; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){matrix_new[i][j] = 1;}}for(int i = 0; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){if(matrix[i][j] == 0){for(int k=0 ; k < matrix[0].length ; k++){matrix_new[i][k] = 0;}for(int k=0 ; k < matrix.length ; k++){matrix_new[k][j] = 0;}}}}for(int i = 0 ; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){if(matrix_new[i][j] != 0){matrix_new[i][j] = matrix[i][j];}}}for(int i = 0 ; i < matrix.length;i++){for(int j = 0 ; j < matrix[0].length ; j++){matrix[i][j] = matrix_new[i][j];}}}
}
表现一般般

咱们优化一下,思路2:
通过观察我们发现,只要一个元素为0,那么它所在的行和列都为0。我们只需记录下来所有0元素的行和列,就能将矩阵置0。
那么空间复杂度为O(m+n)
class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length , n = matrix[0].length;Set<Integer> rows = new HashSet<Integer>();//最大为mSet<Integer> columns = new HashSet<Integer>();//最大为nfor(int i = 0 ; i < m ; i++){for(int j = 0 ;j < n ; j++){if(matrix[i][j] == 0){rows.add(i);columns.add(j);}}}for(Integer i : rows){for(int j = 0 ; j < n ; j++){matrix[i][j] = 0;}}for(Integer i : columns){for(int j = 0 ; j < m ; j++){matrix[j][i] = 0;}}}
}
相对比与思路一,有所进步

思路三:再思考观察,我们发现,除去第一行和第一列,若元素matrix[i][j]为0,那么matrix[i][0]与matrix[0][j]也必0。我们就可以利用第一行第一列记录需要置0的行和列。原地置零,空间复杂度O(1)。
class Solution {public void setZeroes(int[][] matrix) {int row = matrix.length;int col = matrix[0].length;boolean row0_flag = false;boolean col0_flag = false;// 第一行是否有零for (int j = 0; j < col; j++) {if (matrix[0][j] == 0) {row0_flag = true;break;}}// 第一列是否有零for (int i = 0; i < row; i++) {if (matrix[i][0] == 0) {col0_flag = true;break;}}// 把第一行第一列作为标志位for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][j] == 0) {matrix[i][0] = matrix[0][j] = 0;}}}// 置0for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (row0_flag) {for (int j = 0; j < col; j++) {matrix[0][j] = 0;}}if (col0_flag) {for (int i = 0; i < row; i++) {matrix[i][0] = 0;}} }
}

不知道为什么表现没有思路2的好。
相关文章:
LeetCode刷题日志-73矩阵置零
思路一: 用一个同样大小的矩阵记录0的位置,然后遍历矩阵置0, 空间复杂度为O(mn) class Solution {public void setZeroes(int[][] matrix) {int [][] matrix_new new int[matrix.length][matrix[0].length];for(int …...
基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(四)
目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存4. 模型生成 系统测试1. 训练准确率2. 测试效果 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客ÿ…...
文件操作及函数
什么是文件? 在程序设计中,文件有两种:程序文件和数据文件。 程序文件 包括源程序文件(.c),目标文件(.obj),可执行程序(.exe)。 数据文件 文件的内容不一定是程序&…...
阿里云国际版无法远程连接Windows服务器的排查方法
如果您遇到紧急情况,需要尽快登录Windows实例,请参见以下操作步骤,先检查ECS实例的状态,然后通过云助手向Windows实例发送命令或通过VNC登录实例,具体步骤如下: 步骤一:检查ECS实例状态 无论何…...
华清远见嵌入式学习——QT——作业4
作业要求: 代码运行效果图: 代码: 头文件: #ifndef ALARMCLOCK_H #define ALARMCLOCK_H#include <QWidget> #include <QTimerEvent> #include <QTimer> #include <QTime> #include <QTextToSpeech&g…...
Visuial Studio 打开 Unity 脚本时,脚本继承MonoBehaviour暂时失效为白色的解决方法
问题描述: u3d2020.3.47f1c1 vs2019 之前C#脚本A好好的,今天改了一行代码,在储存,就出现这个问题了,变白之后,新增的一行代码不生效,之前的代码照常运行。 如下办法都不能解决我的问题&…...
CentOS使用kkFileView实现在线预览word excel pdf等
一、环境安装 1、安装LibreOffice wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.5.3.2/rpm/x86_64/LibreOffice_7.5.3.2_Linux_x86-64_rpm.tar.gz # 解压缩 tar -zxf LibreOffice_7.5.3.2_Linux_x86-64_rpm.tar cd LibreOffice_7.5.3.2_Linux_x86…...
黑豹程序员-EasyExcel实现导出
需求 将业务数据导出到excel中,老牌的可以选择POI,也有个新的选择EasyExcel。 有个小坑,客户要求样式比较美观,数字列要求千位符,保留2位小数。 可以用代码实现但非常繁琐,用模板就特别方便,模…...
【项目小结】优点分析
一、 个人博客系统 一)限制强制登录 问题:限制用户登录后才能进行相关操作解决: 1)前端: ① 写一个函数用于判断登录状态,如果返回的状态码是200就不进行任何操作,否则Ajax实现页面的跳转操作…...
已经写完的论文怎么降低查重率 papergpt
大家好,今天来聊聊已经写完的论文怎么降低查重率,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 已经写完的论文怎么降低查重率 背景介绍 在学术界,论文的查重率是评价论文质量的…...
科研论文中PPT图片格式选择与转换:EPS、SVG 和 PDF 的比较
当涉及论文中的图片格式时,导师可能要求使用 EPS 格式的图片。EPS(Encapsulated PostScript)是一种矢量图格式,它以 PostScript 语言描述图像,能够无损地缩放并保持图像清晰度。与像素图像格式(如 PNG 和 J…...
mybatis xml 热部署
平时我们在项目中多多少少会根据不同的情况等等原因去调试sql,在数据库测试完后也需要在代码里面运行测试,但是每次修改就需要重启服务就显得太繁琐,所以如果mybatis的xml也可以热部署当然是最好的了,那我来试试如何可以将mybatis…...
MySQL的事务以及springboot中如何使用事务
事务的四大特性: 概念: 事务 是一组操作的集合,它是不可分割的工作单元。事务会把所有操作作为一个整体,一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 注意: 默认MySQ…...
docker二 redis单机安装
创建文件夹 mkdir -p /usr/local/redis/data /usr/local/redis/logs /usr/local/redis/conf chmod -R 777 /usr/local/redis/data* chmod -R 777 /usr/local/redis/logs*另一种风格 # 创建 redis 配置存放目录 mkdir -p /home/docker/redis/conf && chmod 777 /home/…...
【解决】Vue elementUI table表格 列错位/滑动后切换每页显示数后错位/表格使用fixed后错位...
table表格右侧列固定后,在切换页面之后,就会出现列错误的现象 <el-tablev-adaptive"{ bottomOffset: 85 }"height"100px"v-loading"loading":data"dataList"> 解决方法 方法一 1、给表格添加ref &…...
uniapp实战 —— 分类导航【详解】
效果预览 组件封装 src\pages\index\components\CategoryPanel.vue <script setup lang"ts"> import type { CategoryItem } from /types/index defineProps<{list: CategoryItem[] }>() </script><template><view class"category&…...
LangChain学习二:提示-实战(下半部分)
文章目录 上一节内容:LangChain学习二:提示-实战(上半部分)学习目标:提示词中的示例选择器和输出解释器学习内容一:示例选择器1.1 LangChain自定义示例选择器1.2 实现自定义示例选择器1.2.1实战:…...
Network 灰鸽宝典【目录】
目前已有文章 21 篇 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 服务配置环境部署GitNPM 浏览器编辑器系…...
基于SSM的实验室排课系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
Docker部署wordpress和Jenkins
准备机器: 192.168.58.151 (关闭防火墙和selinux) 安装好docker服务 (详细参照:http://t.csdnimg.cn/usG0s 中的国内源安装docker) 部署wordpress: 创建目录: [rootdocker ~]# mkdi…...
前端工程师转型AI Agent开发工程师:小白也能轻松入门的大模型学习路线(建议收藏!)
前端工程师转型AI Agent开发工程师:小白也能轻松入门的大模型学习路线(建议收藏!) 前端工程师转型AI Agent开发具有天然优势,如成熟的Web技术栈、丰富的API调用经验和敏锐的产品交互思维。要转型成功,需补齐…...
【RAG】基于 RAG 的知识库问答系统设计与实现
基于 RAG 的知识库问答系统设计与实现1. 系统介绍2. 技术与方法3. 核心功能代码片段3.1 知识库创建3.2 知识对话问答3.3 知识库清空4. 系统运行效果截图4.1 文件上传与知识库创建4.2 知识库问答4.3 文件删除与知识库清空总结项目代码地址:https://github.com/AI-Mee…...
Changelog.com贡献指南:如何参与这个活跃的开源项目
Changelog.com贡献指南:如何参与这个活跃的开源项目 【免费下载链接】changelog.com Changelog is news and podcast for developers. This is our open source platform. 项目地址: https://gitcode.com/gh_mirrors/ch/changelog.com Changelog.com是一个使…...
PregelProtocol——定义了“LangChain执行体“最小功能集
1. 配置绑定通过前面的内容我们会发现RunnableConfig这个对象几乎时无所不在,我们在调用Pregel对象的时候可以将它作为参数,用来提供用于控制其执行行为(比如迭代限制,并发控制等)的配置。执行引擎还将它作为容器用来下…...
程序员因简单自动化放弃Python转C,底层逻辑令人震撼
一、一个“简单自动化”,逼得程序员放弃Python转C 拥有一个共识的程序员是很多的,那就是Python、JavaScript上手速度快,还省力,进行写自动化工具完全就是“降维打击”,又有谁会花费力气去写晦涩到难以理解的C语言呢&am…...
深入解析LM2675电源管理芯片内部架构与设计原理
1. 芯片内部电路设计概述作为一名从业十年的芯片设计工程师,我经常遇到同行对芯片内部结构一知半解的情况。很多人拿到新芯片后直接翻到Datasheet的应用电路部分,按推荐设计搭建外围电路就完事。这种做法虽然能快速实现功能,却错失了深入理解…...
Android学习资源与成长指南
Android学习资源与成长指南 概述 本文将Android开发者的成长路径、学习资源、开源项目、技术社区、推荐书籍和面试准备整合为一份完整指南,覆盖从入门到架构师的全阶段。一、学习路线图:从入门到架构师 1.1 第一阶段:初级开发(0-6…...
终极删除命令(强制解锁 + 删文件 + 删目录)
🔥 终极删除命令(强制解锁 删文件 删目录)前言 二、使用步骤 // “E:\Documents\HBuilderProjects\个人简历\tmpim” 是想要删除的文件夹 ① 解锁所有被占用的文件(解决 “正在使用”) cmd taskkill /f /im HBuilde…...
如何0失败部署ChemCrow?从环境配置到功能落地的全景指南
如何0失败部署ChemCrow?从环境配置到功能落地的全景指南 【免费下载链接】chemcrow-public Chemcrow 项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public ChemCrow是一款基于Langchain构建的开源化学智能工具包,集成了RDKit化学工具、…...
Linux/C++多进程
给你最简洁、能直接用、新手一看就懂的 Linux C 多进程核心内容,不废话。1. 核心 API(就这 3 个最常用)fork():创建子进程getpid():获取当前进程 IDwait() / waitpid():等待子进程结束,防止僵尸…...
