算法day31

第一题

542. 01 矩阵

        本题本来求解的是每一个1到0的最短距离并返回到矩阵之中;

        我们采用正难则反的思路,将其化解为每一个0到每一个1的最短距离,并通过矩阵来返回;

解法:多源bfs+正难则反

步骤一:

        定义一个相同大小的dis矩阵,每一个位置都填入-1;

步骤二:

        遍历整个原始矩阵,每一个0点的位置相对应到dis矩阵,并每一个点都填入为0,并将每一个零点都添加到队列

步骤三:

        对于队列中的每一个元素都进行bfs查找,没进行依次查找,dis相对应的位置都加一,直到遍历完所有队列中的元素或者遍历到的所有元素都在边界为止;

使用dis【】【】矩阵的好处:

  1、dist[i][j] = -1 表示当前位置没有被扫描标记
  2、dist[i][j] != -1,表示当前位置里面存在的是当前位置到0的最短距离

至此,代码如下:

class Solution {int[] dx = {0,0,1,-1};int[] dy = {1,-1,0,0};public int[][] updateMatrix(int[][] mat) {int m = mat.length,n = mat[0].length;//dist[i][j] = -1 表示当前位置没有被扫描标记//dist[i][j] != -1,表示当前位置里面存在的是当前位置到0的最短距离int[][] dist = new int[m][n];for(int i = 0;i < m ;i++){for(int j = 0;j< n;j++){dist[i][j] = -1;}}Queue<int[]> q = new LinkedList<>();//1、把所有的原点加入到队列里面for(int i = 0;i < m ;i++){for(int j = 0;j< n;j++){if(mat[i][j] == 0){dist[i][j] = 0;q.add(new int[]{i,j});}}}//2、一层一层的往外扩while(!q.isEmpty()){int[] t = q.poll();int a = t[0],b = t[1];for(int i = 0; i<4;i++){int x = a + dx[i],y = b +dy[i];if(x >= 0 && y >=0 && y<n && x<m && dist[x][y] == -1){dist[x][y] = dist[a][b]+1;q.add(new int[]{x,y});}}}return dist;}
}

第二题

1020. 飞地的数量

        解法:正难则反+多源bfs

        从矩阵的边界1开始开始进行bfs遍历,对于每一个被遍历到的1进行标记;等边界的所有1bfs遍历完之后,没有被标记的1的个数就是我们所要求解的值;

 至此,代码如下:

class Solution {int[] dx = {0,0,1,-1};int[] dy = {1,-1,0,0};public int numEnclaves(int[][] grid) {int m = grid.length,n = grid[0].length;boolean[][] vis = new boolean[m][n];Queue<int[]> q = new LinkedList<>();//1、把边上的1全部加入到队列中for(int i = 0;i < m ;i++){for(int j = 0;j< n;j++){if(i == 0 || i == m-1 || j == 0 || j == n-1){if(grid[i][j] == 1){q.add(new int[]{i,j});vis[i][j] = true;}}}}//2、多源bfswhile(!q.isEmpty()){int[] t = q.poll();int a = t[0],b = t[1];for(int i = 0; i<4;i++){int x = a + dx[i],y = b +dy[i];if(x >= 0 && y >=0 && y<n && x<m && !vis[x][y] && grid[x][y] ==1 ){vis[x][y] = true;q.add(new int[]{x,y});}}}//3、提取结果int ret = 0;for(int i = 0;i < m ;i++){for(int j = 0;j< n;j++){if(grid[i][j] == 1 && !vis[i][j]){ret ++;}              }}return ret;}
}

第三题

1765. 地图中的最高点

解法:正难则反+多源bfs

原矩阵如下:

新定义一个数组,着所有的数值为-1,然后遍历原始矩阵,其1点位置赋值为0;如下:

将每一个0点放入到队列中,并按照出队的顺序对每一个元素进行上下左右的遍历;每一个被遍历的位置都是在最初的位置的值加一,这样一直到遍历完所有的当前非0点,得到新的矩阵;

        第一次bfs遍历:

        第二次bfs遍历:

        

至此,代码如下:

class Solution {int[] dx = {0,0,-1,1};int[] dy = {1,-1,0,0};public int[][] highestPeak(int[][] Water) {int m = Water.length,n = Water[0].length;int[][] WaterModel = new int[m][n];for(int i = 0 ;i< m; i++){for(int j = 0 ; j< n ;j++){WaterModel[i][j] = -1;}} Queue<int[]> q = new LinkedList<>();//1、处理所有的水域for(int i = 0 ;i< m; i++){for(int j = 0 ; j< n ;j++){if(Water[i][j] == 1){q.add(new int[]{i,j});WaterModel[i][j] = 0;}}} //2\多源bfswhile(!q.isEmpty()){int[] t = q.poll();int a = t[0],b = t[1];for(int i = 0 ;i < 4 ;i++){int x = a + dx[i],y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && WaterModel[x][y] == -1){q.add(new int[]{x,y});WaterModel[x][y] = WaterModel[a][b] + 1; }} }return WaterModel;}
}

第四题 

1162. 地图分析

解法:正难则反+多源bfs

本题询问的0到1的最长距离,我们可以转换思路,求解每一个1到0的最长距离;

原始矩阵如下:

定义模拟矩阵,首先都赋值为-1;之前原始矩阵为1的地方赋值为0,并开始根据这些0激进型bfs遍历;

至此,代码如下:

class Solution {    int[] dx = {0,0,-1,1};int[] dy = {1,-1,0,0};public int maxDistance(int[][] grid) {int m = grid.length,n = grid[0].length;int[][] model = new int[m][n];for(int i = 0 ;i< m; i++){for(int j = 0 ; j< n ;j++){model[i][j] = -1;}} Queue<int[]> q = new LinkedList<>();for(int i = 0 ;i< m; i++){for(int j = 0 ; j< n ;j++){if(grid[i][j] == 1){q.add(new int[]{i,j});model[i][j] = 0;}}}int ret = -1;while(!q.isEmpty()){int[] t = q.poll();int a = t[0],b = t[1];for(int i = 0 ;i < 4 ;i++){int x = a + dx[i],y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && model[x][y] == -1){q.add(new int[]{x,y});model[x][y] = model[a][b] + 1; ret = Math.max(ret,model[x][y]);}} }return ret;}
}

ps:本次的内容就到这里了,如果对你有所帮助的话,就请一键三连哦!!!

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

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

相关文章

STM32单片机选型方法

一.STM32单片机选型方法 1.首先要确定需求&#xff1a; 性能需求&#xff1a;根据应用的复杂度和性能要求&#xff0c;选择合适的CPU性能和主频。 内存需求&#xff1a;确定所需的内存大小&#xff0c;包括RAM和Flash存储空间。 外设需求&#xff1a;根据应用所需的功能&…

几款让你怦然心动的神奇工具——搜嗖工具箱

alteredqualia AlteredQualia 脑洞爆炸器网站&#xff0c;不得不说这是一个神奇的网站&#xff0c;在这个网站上你可以实现不可思议的各种操作&#xff0c;让我们对网站有了新的认知&#xff0c;因为它告诉你不是所有有趣的网站都那么花哨&#xff0c;有些网站看着外形平淡无奇…

【工业自动化领域解决方案】利用Profishark工具捕获EtherCAT报文

随着工业自动化技术的不断进步&#xff0c;对于实时数据捕获和分析的需求也在增加。尤其在EtherCAT这样的高性能工业网络中&#xff0c;精准的报文捕获和分析工具显得尤为重要。在这篇文章中&#xff0c;我们将深入探讨如何利用ProfiShark工具捕获EtherCAT报文&#xff0c;并展…

【深度学习】NLP,Transformer讲解,代码实战

文章目录 1. 前言2. Transformer结构训练过程1. 输入嵌入和位置编码2. 编码器层2.1 单头的注意力机制(便于理解)2.2 多头的注意力机制(Transformer真实使用的)2.3 残差连接和层归一化2.4 前馈神经网络&#xff08;FFN&#xff09;2.5 残差连接和层归一化2.6 总结 3. 解码器层 推…

Sentence Transformers x SwanLab:可视化Embedding训练

Sentence Transformers(又名SBERT)是访问、使用和训练文本和图像嵌入&#xff08;Embedding&#xff09;模型的Python库。 你可以使用Sentence Transformers快速进行模型训练&#xff0c;同时使用SwanLab进行实验跟踪与可视化。 1. 引入SwanLabCallback from swanlab.integra…

XSS攻击

黑客怎么拿到你的cookies呢&#xff1f; 浏览器可以执行脚本 网站有留言板 黑客发现留言板有xss漏洞&#xff0c;没有做过滤 一般就是网络管理员登录后台查看留言数据&#xff0c;然后就会产生cookies 然后之前黑客留言的东西就包含恶意的程序&#xff08;不仅写了留言&am…

运维系列.在Docker中使用Grafana

运维专题 在Docker中使用Grafana - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855026…

[数据集][目标检测]减速带检测数据集VOC+YOLO格式5400张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5400 标注数量(xml文件个数)&#xff1a;5400 标注数量(txt文件个数)&#xff1a;5400 标注…

AI图书下载:《ChatGPT打造赚钱机器》

这本书《ChatGPT打造赚钱机器》&#xff08;ChatGPT Money Machine 2024 The Ultimate Chatbot Cheat Sheet&#xff09;是一本全面的指南&#xff0c;旨在帮助读者快速掌握如何利用ChatGPT等人工智能技术创造收益。 以下是各章节内容的总结&#xff1a; **引言** 介绍了人工智…

docker环境中配置phpstorm php xdebug调试工具

本文介绍通过docker compose的使用方式 第一步&#xff1a;在php镜像中安装phpxdebug扩展&#xff0c;比如php7.4对应的是xdebug3.1.6 第二步&#xff1a;设置项目中的docker-compose.yml docker-compose 增加开启xdebug的环境变量,host.docker.internal是宿主机的地址&#…

Java版+ SaaS应用+接口技术RESTful API 技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开

Java版 SaaS应用接口技术RESTful API WebSocket WebService技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开 医院住院管理系统&#xff08;Hospital Information System简称HIS&#xff09;是一门医学、信息、管理、计算机等多种学科为一体的边缘科学&#xff…

Aivis:AI声音模仿系统的创新之旅

在人工智能技术的不断进步中&#xff0c;声音合成技术也迎来了新的发展机遇。Aivis项目正是这一领域的杰出代表&#xff0c;它提供了一个全流程的工具&#xff0c;让用户能够从数据集的创建到学习再到推理&#xff0c;一站式地生成逼真的语音。 Aivis是一个基于Bert-VITS2模型的…

基于hispark_taurus开发板示例学习OpenHarmony编译构建系统(2)

3、hispark_taurus产品解决方案-Vendor 产品解决方案为基于开发板的完整产品&#xff0c;主要包含产品对OS的适配、组件拼装配置、启动配置和文件系统配置等。产品解决方案的源码路径规则为&#xff1a;vendor/{产品解决方案厂商}/{产品名称}_。_产品解决方案也是一个特殊的组…

mac下Xcode在iphone真机上测试运行iOS软件

最近一个需求需要在iPhone真机上测试一个视频直播的项目。 需要解决如何将项目 app 安装到真机上 在进行真机调试。 安装Xcode 直接在App Store上搜索Xcode安装即可。 关键是要安装Simulator。项目需要安装iOS17.5但是由于安装包太大&#xff0c;并且网络不稳定的原因。在Xco…

Apache网页优化

一、网页压缩与缓存 1.1网页压缩 网站访问速度影响因素&#xff1a;应用程序响应速度、网络带宽、服务器性能、与客户端之间网络传输速度等。其中最重要的是一个因素是Apache本身&#xff0c;因此提升Apache执行速度&#xff08;使用网页压缩&#xff09;是性价比最高的选择。…

Lua实现自定义函数面向对象编程

本文目录 1、引言2、原理3、实例4、层析验证 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在现代软件开发中&#xff0c;面向对象编程&#xff08;OOP&#xff09;已经成为一种广泛使用的编程范式…

python数据分析---ch10 数据图形绘制与可视化

python数据分析--- ch10 python数据图形绘制与可视化 1. Ch10--python 数据图形绘制与可视化1.1 模块导入1.2 数据导入 2. 绘制直方图2.1 添加图表题2.2 添加坐标轴标签 3. 绘制散点图4. 绘制气泡图5. 绘制箱线图5.1 单特征的箱线图5.2 多特征的箱线图 6. 绘制饼图7. 绘制条形图…

每日5题Day25 - LeetCode 121 - 125

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {if(prices.length 1){return 0;}//dp…

热门开源项目推荐: diffusionbee

随着AI技术的快速发展&#xff0c;深度学习和机器学习已经成为各领域的热门话题。Stable Diffusion是一种强大的深度学习模型&#xff0c;它能够在图像生成和处理方面展现出惊人的效果。为了让更多用户能够轻松地使用Stable Diffusion&#xff0c;Diffusion Bee应运而生&#x…

el-table表头文字换行或者修改字体颜色样式

例如 <el-table:data"tableData":header-cell-style"headClass" style"width: 100%;" border ><el-table-columnprop"address"label"生产工序"align"center"></el-table-column> //重点看这里…