LeetCode 热题 100 Day04

矩阵相关题型

Leetcode 73. 矩阵置零【中等】

题意理解:        

        将矩阵中0所在位置,行|列置换为全0

        其中可以通过记录0元素所在的行、列号,来标记要置换的行|列

        将对应位置置换为0

解题思路:        

        第一个思路:

        可以通过两个set: row col 分别用来记录要置换的行|列号

        同时set实现去重,不用重复操作

        遍历row和col,将要置换的行|列,置换为全0

        第二个思路:不适用额外的空间存储,使用矩阵的第一行和第一列进行存储。

        1.flag_row 和flag_col标记原来的第一行|第一列是否有0,有为true

        2.遍历元素(i=1,j=1),当且仅当,当前元素为0是,将对应第一行第一列的位置元素置为0

        3.遍历元素(i=1,j=1),当且仅当,对应行|列头为0时,当前元素为0

        4.处理第一行|第一列,当且仅当flag_row (flag_col)==true时,将第一行(第一列)置换为全0.

1.解题【额外的空间记录】

class Solution {public void setZeroes(int[][] matrix) {Set<Integer> row=new HashSet<>();Set<Integer> col=new HashSet<>();for(int i=0;i<matrix.length;i++){for(int j=0;j<matrix[0].length;j++){if(matrix[i][j]==0){row.add(i);col.add(j);}}}//填充0for(int num:row){for(int j=0;j<matrix[0].length;j++){matrix[num][j]=0;}}for(int num:col){for(int i=0;i<matrix.length;i++){matrix[i][num]=0;}}}
}

1.解题【矩阵本身记录】

class Solution {public void setZeroes(int[][] matrix) {int row=matrix.length;int col=matrix[0].length;boolean flag_row=false,flag_col=false;for(int j=0;j<col;j++){if(matrix[0][j]==0){flag_row=true;break;}}for(int i=0;i<row;i++){if(matrix[i][0]==0){flag_col=true;break;}}//记录for(int i=1;i<row;i++){for(int j=1;j<col;j++){if(matrix[i][j]==0){matrix[i][0]=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(flag_row){for(int j=0;j<col;j++){matrix[0][j]=0;}}//第一列if(flag_col){for(int i=0;i<row;i++){matrix[i][0]=0;}}}
}

2.复杂度分析

时间复杂度:O(n^2) 双for的时间损耗

空间复杂度:O(n) row和col的空间损耗

                     思路二的时间复杂度:O(1) 除了i,j外没有额外的空间损耗

Leetcode 54. 螺旋矩阵【中等】

题意理解:

        从(0,0)位置顺时针螺旋,遍历数据

        

解题思路:

        模拟转向:

        1.模拟螺旋结构进行顺时针转向,其转向总是右下左上,依次循环

        2.我们用directions={右、下、左、上}模拟转向,其中(i+1)%4表示选择的转向

        3.转向的条件:i,j越界,或,下一个位置已经被访问过。

        

        

1.解题【模拟螺旋转向】

class Solution {public List<Integer> spiralOrder(int[][] matrix) {int row=matrix.length;int col=matrix[0].length;List<Integer>  result=new ArrayList<>();if(matrix==null||matrix.length==0||matrix[0].length==0){return result;}int[][] diresction=new int[][]{{0,1},{1,0},{0,-1},{-1,0}};//右下左上boolean[][] visited = new boolean[row][col];int i_index=0,j_index=0;int direct_index=0;for(int i=1;i<=row*col;i++){result.add(matrix[i_index][j_index]);visited[i_index][j_index]=true;int nextRow=i_index+diresction[direct_index][0],nextCol=j_index+diresction[direct_index][1];//越界转向if(nextRow<0||nextRow>=row||nextCol<0||nextCol>=col||visited[nextRow][nextCol]){direct_index=(direct_index+1)%4;}i_index+=diresction[direct_index][0];j_index+=diresction[direct_index][1];}return result;}
}

1.解题【按层模拟,一次遍历转一周】

class Solution {public List<Integer> spiralOrder(int[][] matrix) {int row=matrix.length;int col=matrix[0].length;List<Integer>  result=new ArrayList<>();if(matrix==null||matrix.length==0||matrix[0].length==0){return result;}//上下左右四个边界int top=0,bottom=row-1,left=0,right=col-1;while(left<=right&&top<=bottom){//左for(int j=left;j<=right;j++){result.add(matrix[top][j]);}//下for(int i=top+1;i<=bottom;i++){result.add(matrix[i][right]);}if(left<right&&top<bottom){//右for(int j=right-1;j>left;j--){result.add(matrix[bottom][j]);}//上for(int i=bottom;i>top;i--){result.add(matrix[i][left]);}}left++;right--;top++;bottom--;}return result;}
}

2.复杂度分析

思路一: 

 时间复杂度:O(n) for循环时间损耗

 空间复杂度:O(n^2) visited[][]数组的空间损耗

思路二:

时间复杂度:O(n^2) while+for时间损耗

空间复杂度:O(n) 结果集的空间损耗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSRF 跨站请求伪造

CSRF漏洞 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&…

[Linux][多线程][二][线程互斥][互斥量][可重入VS线程安全][常见锁概念]

目录 1.线程互斥1.互斥相关背景概念2.多个线程并发的操作共享变量&#xff0c;会带来一些问题3.互斥量mutex 2.互斥量的接口1.初始化互斥量2.销毁互斥量3.加锁4.解锁5.使用 -- 改善上面代码 3.互斥量实现原理探究1.加锁是如何保证原子性的&#xff1f;2.如何保证锁是原子性的&a…

【计算机组成原理】浮点运算方法和浮点运算器

浮点加法、减法运算 浮点数加减法的步骤结合题目分析步骤 浮点数加减法的步骤 ① 0 操作数检查 ② 比较阶码大小&#xff0c;完成对阶 ③ 尾数进行加减法运算 ④ 结果规格化 ⑤ 舍入处理 ⑥ 判断结果是否溢出 结合题目分析步骤 例&#xff1a;设 x 2010 0.11011011&#x…

Hadoop3:HDFS、YARN、MapReduce三部分的架构概述及三者间关系(Hadoop入门必须记住的内容)

一、HDFS架构概述 Hadoop Distributed File System&#xff0c;简称HDFS&#xff0c;是一个分布式文件系统。 1&#xff09;NameNode(nn)&#xff1a;存储文件的元数据&#xff0c;如文件名&#xff0c;文件目录结构&#xff0c;文件属性&#xff08;生成时间、副本数、文件…

springboot整合mybatis-puls登陆注册

目录 创建springboot项目 目录结构&#xff1a; 启动类 测试类 idea建表 pom文件 编写yml文件 qq邮箱设置 登陆注册代码 编写持久层(Dao) 注册代码 业务层 业务实现类 mapper 控制层 前端代码 注册页面 邮件正文&#xff1a; 登录代码 控制层 业务层&#…

索引【MySQL】

文章目录 什么是索引测试表 磁盘和 MySQL 的交互了解磁盘MySQL 的工作原理Buffer Pool 理解索引引入Page 的结构页内目录&#xff08;Page Directory&#xff09;多页情况B 树和 B树聚簇索引和非聚簇索引 主键索引创建 唯一索引主要特点与主键索引的区别使用场景创建 联合索引工…

WEB攻防-ASP安全-MDB下载

MDB下载漏洞主要涉及到早期ASPAccess构架的数据库文件。当Web站点提供文件下载功能时&#xff0c;如果没有对下载请求进行充分的验证和过滤&#xff0c;或者服务器配置不当&#xff0c;就可能产生文件下载漏洞。攻击者可以利用这个漏洞&#xff0c;通过修改请求参数或尝试猜测或…

YOLOv8蒸馏 | 知识蒸馏 | 利用模型蒸馏改进YOLOv8进行无损涨点 | MimicLoss(在线蒸馏 + 离线蒸馏)

一、本文介绍 这篇文章给大家带来的是模型的蒸馏&#xff0c;利用教师模型指导学生模型从而进行模型的涨点&#xff0c;本文的内容不仅可以用于论文中&#xff0c;在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术&#xff0c;所以大家可以仔细学习一下本文的内容&#…

CTF-reverse-simpleRE(base64变表逆向)

题目链接 NSSCTF | 在线CTF平台 题目详情 [HUBUCTF 2022 新生赛]simple_RE 解题报告 下载得到的文件使用ida64分析&#xff0c;如果报错就换ida32&#xff0c;得到分析结果&#xff0c;有main函数就先看main main函数分析 main函数的逻辑看下来十分简单&#xff0c;因此关键…

Redis入门到通关之Redis数据结构-ZSet篇

文章目录 ZSet也就是SortedSet&#xff0c;其中每一个元素都需要指定一个 score 值和 member 值&#xff1a; 可以根据score值排序后member必须唯一可以根据member查询分数 因此&#xff0c;zset底层数据结构必须满足键值存储、键必须唯一、可排序这几个需求。之前学习的哪种编…

STM32自动光控窗帘程序+Proteus仿真图 H桥L298驱动电机

目录 1、前言 2、仿真图 3、源程序 资料下载地址&#xff1a;STM32自动光控窗帘程序Proteus仿真图 H桥L298驱动电机 1、前言 基于STM32F103设计的智能光控窗帘&#xff0c;包含STM32芯片、光敏电阻、LCD1602显示屏、电机驱动控制模块等。 备注&#xff1a;通过ARM内部的…

管理 Python 项目的艺术:在 PyCharm 中使用虚拟环境(以BPnP为例)

在 PyCharm 中使用虚拟环境对于 Python 项目开发具有多方面的重要作用&#xff0c;这些作用体现在提升项目管理的效率、保障代码的可运行性以及维护项目的长期稳定性等方面。以下是使用虚拟环境的几个关键好处&#xff1a; 1. 依赖管理和隔离 虚拟环境允许每个项目拥有…

Hadoop3:大数据生态体系

一、技术层面 通过下面这张图&#xff0c;我们可以大概确定&#xff0c;在大数据行业里&#xff0c;自己的学习路线。 个人认为&#xff0c;Hadoop集群一旦搭建完工&#xff0c;基本就是个把人运维的事情 主要岗位应该是集中在数据计算层&#xff0c;尤其是实时计算&#xff…

单调栈(C/C++)

引言&#xff1a; 单调队列和单调栈都是一种数据结构&#xff0c;应用十分广泛&#xff0c;在蓝桥杯、ICPC、CCPC等著名编程赛事都是重点的算法&#xff0c;今天博主将自己对单调栈与单调队列的理解以及刷题的经验&#xff0c;用一篇博客分享给大家&#xff0c;希望对大家有所…

【UI】element-ui的el-dialog的遮罩层在模态框的前面bug

最近在写element ui 的时候使用dialog组件&#xff0c;偶然出现了这种情况 原因&#xff1a; 是因为遮罩层插入进了body标签下&#xff0c;z-index高于当前父元素。 解决&#xff1a;在el-dialog标签里加上:modal-append-to-body"false"就可以了。 饿了么官网文档&a…

Ardupilot OpenIPC 基于WFB-NG构架分析和数据链路思考

Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考 1. 源由2. OpenIPC安装2.1 安装2.2 配置2.2.1 天空端配置文件2.2.2 地面端配置文件 2.3 当前配置选择 3. WFB-NG安装3.1 RTL8812AU安装3.1.1 驱动安装3.1.2 定位设备 3.2 wfb-ng安装3.2.1 传输层安装3.2.2 配置…

照片相似性搜索引擎Embed-Photos;赋予大型语言模型(LLMs)视频和音频理解能力;OOTDiffusion的基础上可控制的服装驱动图像合成

✨ 1: Magic Clothing Magic Clothing是一个以可控制的服装驱动图像合成为核心的技术项目&#xff0c;建立在OOTDiffusion的基础上 Magic Clothing是一个以可控制的服装驱动图像合成为核心的技术项目&#xff0c;建立在OOTDiffusion的基础上。通过使用Magic Clothing&#xf…

Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总

一 问题一 pod [!] Unknown command: package 1.1 如果没有安装过cocoapods-packager&#xff0c;安装cocoapods-packager&#xff0c;sudo gem install cocoapods-packager 1.2 如果已经安装cocoapods-packager&#xff0c;还是出现上面的错误&#xff0c;有可能是pod的安…

防、治、管融合一体化旅居健康守护系统

随着人口老龄化趋势的加剧和人们生活水平的提高&#xff0c;养老服务需求不断增长。旅居养老作为一种新型的养老模式&#xff0c;逐渐受到广大老年人的青睐。在生命健康服务运营平台中&#xff0c;为了给老人提供全方位、个性化的生命健康服务&#xff0c;我们平台也特意开设了…

31 信号量

概念 共享内存在通信的过程中&#xff0c;没有任何保护机制。当A进程写入了一部分&#xff0c;就被B、拿走了&#xff0c;导致双方发和收的数据不完整&#xff0c;数据不一致问题 1.A和B看到同一份资源&#xff0c;共享资源&#xff0c;如果不加保护&#xff0c;会导致数据不…