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;&…

Go的题目

文章目录 前置概念自旋同步原语是什么意思sync.Mutex不是自旋锁互斥锁和读写锁的区别 GMPgoroutine的调度策略golang线程模型简述从全局队列里获取goroutine简述从本地队列里获取goroutineGolang map是否并发/线程安全 前置概念 自旋 “自旋就是循环等待锁释放” 在Go语言&a…

InnoDB的AUTO_INCREMENT处理

本文翻译自MySQL官方手册&#xff0c;对InnoDB的AUTO_INCREMENT处理作了介绍。 InnoDB提供了可配置的锁机制&#xff0c;可显著提升在有AUTO_INCREMENT列的表中插入行记录的SQL语句的可伸缩性和性能。 为了在InnoDB表中使用AUTO_INCREMENT机制&#xff0c;必须将AUTO_INCREMEN…

[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树聚簇索引和非聚簇索引 主键索引创建 唯一索引主要特点与主键索引的区别使用场景创建 联合索引工…

多元随机分布的协方差矩阵的计算(python示例)

协方差矩阵是统计学中描述两个或多个随机变量之间线性相关程度的一个重要工具。对于一个 k k k 维随机向量 X ( X 1 , X 2 , . . . , X k ) X (X_1, X_2, ..., X_k) X(X1​,X2​,...,Xk​)&#xff0c;其协方差矩阵是一个 k k k \times k kk 的矩阵&#xff0c;其中每个元…

WEB攻防-ASP安全-MDB下载

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

OSPF的防止环路的机制

OSPF协议中避免环路的机制包括以下几点&#xff1a; 1.区域内防环&#xff1a;在同一OSPF区域内&#xff0c;所有路由器通过交换链路状态通告&#xff08;LSA&#xff09;来共享网络拓扑信息。每台路由器根据这些信息使用最短路径优先&#xff08;SPF&#xff09;算法&#xff…

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

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

课时103:正则表达式_基础实践_分组符号

3.1.4 分组符号 学习目标 这一节&#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;希望对大家有所…

华为OD机试真题-幼儿园篮球游戏-2023年OD统一考试(C卷D卷)

题目描述: 幼儿园里有一个放倒的圆桶,它是一个 线性结构,允许在桶的右边将篮球放入,可以在桶的左边和右边将篮球取出。每个篮球有单独的编号,老师可以连续放入一个或多个篮球,小朋友可以在桶左边或右边将篮球取出,当桶只有一个篮球的情况下,必须从左边取出。 如老师按顺…