算法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.mzph.cn/diannao/27717.shtml

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

相关文章

如何通过ChatGPT赚取11000美元:我的成功故事

作者&#xff1a;Skylar Johnson 随着像ChatGPT这样的AI语言模型的出现&#xff0c;赚取金钱和使用先进技术的机会变得越来越容易获得。在这篇文章中&#xff0c;我将分享我个人如何利用ChatGPT赚取11000美元的成功故事。跟随我的旅程可以给你提供洞见和灵感&#xff0c;去探索…

换卡槽=停机?新手机号使用指南!

刚办理的手机号莫名其妙的就被停用了&#xff1f;这到底是怎么回事&#xff1f;这篇文章快来学习一下吧。 ​ 先说一下&#xff0c;你的手机为什么被停机&#xff1f; 现在运营商对于手机卡的使用有着非常严格的要求&#xff0c;尤其是刚办理的新号码&#xff0c;更是“严上加…

Docker镜像构建:Ubuntu18.04+python3.10

1、编写 Dockerfile # 使用Ubuntu 18.04作为基础镜像 FROM ubuntu:18.04RUN apt-get update && apt-get install -y \build-essential \curl \zlib1g-dev \libssl-dev \&& rm -rf /var/lib/apt/lists/*ENV PYTHON_VERSION3.10.8RUN curl -O https://www.pytho…

el-table表格与分页器实现跨页连续计数

直接看代码,只需要让页数pageNum减去1后去乘以要展示的数量pageSize再加上当前索引值加1就可以 <el-table :data"tableData" stripe class"table" ><el-table-column label"序号" type"index" width"100"><t…

【2024算力大会分会 | SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 一、…

有关侧信道攻击,你都知道哪些? 你们的TEE/TA可以防侧信道攻击吗?

侧信道攻击(Side-Channel Attacks,SCA)是一种利用物理信息泄露来推断计算机系统内秘密数据的攻击方法。它与传统的攻击方法不同,不直接依赖于算法的漏洞,而是通过分析系统在处理数据时的物理特性(如功耗、电磁辐射、时间延迟等)来推断机密信息。 常见的侧信道攻击类型 …

算法金 | 再见!!!K-means

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 今天我们来聊聊达叔 6 大核心算法之 —— k-means 算法。最早由斯坦福大学的 J. B. MacQueen 于 1967 年提出&#xff0c;后来经过许多…

进口二手RS FSH4规格3.6G罗德与施瓦茨 FSH6参数

Rohde & Schwarz FSH4 的规格包括&#xff1a; 频率范围从 9 kHz 到 3.6 GHz 高灵敏度&#xff08;<-141dBm&#xff08;1Hz&#xff09;&#xff0c;或使用可选前置放大器<-161dBm&#xff08;1Hz&#xff09;&#xff09; 低测量不确定度&#xff08; 内部跟踪发生…

SpringCloud 前端-网关-微服务-微服务间实现信息共享传递

目录 1 网关获取用户校验信息并保存至请求头&#xff08;前端-网关&#xff09; 2 微服务获取网关中的用户校验信息&#xff08;网关-微服务&#xff09; 2.1 一般的做法是在公共的module中添加&#xff0c;此处示例为common 公共配置module中添加 2.2 定义拦截器 2.3 定义…

简易五子棋

简介 使用Java实现简易五子棋 规则介绍 游戏使用一个标准的1515方格的棋盘&#xff0c;双方分别用黑白两种颜色的棋子进行对战。黑子先行&#xff0c;双方轮流在空棋盘的交叉点上落子&#xff0c;每人一次只能落一子。游戏的目标是让自己的五颗棋子连成一线&#xff0c;这条…

2024面试题【vue2】

1.关于生命周期 1.1生命周期有哪些&#xff1f;发送请求是在created还是mounted beforeCreate&#xff1a;创建之前&#xff08;el、data和message都还是undefined,不可用的&#xff09; created&#xff1a;创建完毕&#xff08;能读取到数据data的值,但是DOM还没生成&#x…

Web前端轮播结束:技术揭秘与用户体验挑战

Web前端轮播结束&#xff1a;技术揭秘与用户体验挑战 在Web前端开发中&#xff0c;轮播图作为一种常见的页面元素&#xff0c;承载着展示图片、传递信息的重要功能。然而&#xff0c;当轮播结束时&#xff0c;如何处理这一状态&#xff0c;却是一个既具挑战又充满困惑的问题。…

一分钟制作爆火的治愈插画,让插画来替你说出心声

超火的AI治愈插画来了&#xff0c;有趣的文字搭配上有趣的图&#xff0c;无论是发朋友圈还是发小红书&#xff0c;这效果简直无敌。 下面是我刚生成的&#xff0c;快来看看效果吧。 这个工具&#xff0c;国内可用&#xff0c;可以直接上手&#xff0c;不需要什么技术&#xff0…

C# Winform 侧边栏,切换不同页面

在项目中我们经常遇到需要在主界面上切换不同子页面的需求&#xff0c;常用做法是左侧显示子页面菜单&#xff0c;用户通过点击左侧菜单&#xff0c;实现右边子页面的展示。 实例项目实现&#xff1a; 项目左侧侧边栏实现FlowLayoutPanel使用显示不同子窗体 实例链接&#xf…

全网首发:教你如何直接用4090玩转最新开源的stablediffusion3.0

1.stablediffusion的概述&#xff1a; Stable Diffusion&#xff08;简称SD&#xff09;近期的动态确实不多&#xff0c;但最新的发展无疑令人瞩目。StableCascade、Playground V2.5和Stableforge虽然带来了一些更新&#xff0c;但它们在SD3面前似乎略显黯然。就在昨晚&#x…

04.VisionMaster 机器视觉找圆工具

VisionMaster 机器视觉找圆工具 定义 先检测出多个边缘点然后拟合成圆形&#xff0c;可用于圆的定位与测量 注意&#xff1a;找圆工具 最好和【位置修正】模块一起使用。具体可以看下面的示例。 参数说明&#xff1a; 扇环半径&#xff1a;圆环ROI的内外圆半径 边缘类型&a…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] K小姐的服务交换接口失败率分析 (100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 K小姐的服务交换接口失败率分析(100分) 🌍 评测功能需要订…

基于.Net 框架实现WebSocket 简单通信——服务端

新建项目 创建一个.Net 框架的控制台程序。 添加包 项目 → 管理 NuGet 程序包打开包管理窗口&#xff0c;添加SuperWebSocket 程序包。 实现 项目 → 添加类打开添加新项窗口&#xff0c;添加一个C#类。 启动监听 WebSocketServer socket new WebSocketServer();Conso…

Web前端教学实录:深入剖析前端技术的奥秘

Web前端教学实录&#xff1a;深入剖析前端技术的奥秘 在数字化时代&#xff0c;Web前端技术已成为构建现代化网站和应用程序不可或缺的一环。然而&#xff0c;对于初学者来说&#xff0c;前端技术的复杂性和多样性往往令人望而生畏。为了帮助广大学习者更好地掌握Web前端技术&…

PyTorch 数学运算-Tensor基本操作

用如下 a b 进行运算演示 >>> a tensor([[0.7967, 0.5056, 0.7963],[0.8603, 0.7029, 0.7590]]) >>> b tensor([[0.6923, 0.0411, 0.8713],[0.0483, 0.2948, 0.3286]])一般加减乘除运算&#xff1a; add/mimus/multiply/divide >>…