算法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,一经查实,立即删除!

相关文章

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

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

【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; 一、…

算法金 | 再见!!!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;这条…

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

超火的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…

【github】项目的代码仓库重命名

问题 有时候&#xff0c;我们先创建了远端项目仓库&#xff0c;然后就把相关code上传到远端项目仓库。 可能需要结合实际情况对远端项目仓库进行重命名。 当前仓库名称v_ttc&#xff0c;如何将他修改成v_datejs 操作步骤 1、在 GitHub.com 上&#xff0c;导航到存储库的主页…

(金融:货币兑换)编写一个程序,提示用户输入从美元到人民币的兑换汇率。

&#xff08;金融:货币兑换)编写一个程序&#xff0c;提示用户输入从美元到人民币的兑换汇率。提示用户输入0表示从美元兑换为人民币&#xff0c;输入1表示从人民币兑换为美元。继而提示用户输入美元数量或者人民币数量&#xff0c;分别兑换为另外一种货币。下面是运行示例: pa…

TCP/IP协议深入解析,初学者必看!

简介 在信息技术飞速发展的今天&#xff0c;网络已成为人类社会不可或缺的部分。实现网络中计算机相互通信的关键之一便是TCP/IP协议。作为互联网的基础&#xff0c;TCP/IP协议确保了全球范围内的数据交换和信息共享。 TCP/IP&#xff08;传输控制协议/网际协议&#xff09;是…

LeetCode 2813.子序列最大优雅度

给你一个长度为 n 的二维整数数组 items 和一个整数 k 。 items[i] [profiti, categoryi]&#xff0c;其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别。 现定义 items 的 子序列 的 优雅度 可以用 total_profit distinct_categories^2 计算&#xff0c;其中 t…

通勤路上的美好伴侣:倍思H1s头戴式蓝牙耳机

在繁忙的都市生活中,通勤往往占据了人们大量的时间。而在这个过程中,无尽的嘈杂声——公交车的播报声、地铁的轰鸣声、街头的喧嚣——往往成为我们心情的干扰源。在这样的环境下,一款优质的头戴式蓝牙耳机,会让我们的通勤之旅变得更加愉快和舒适。 通勤路上要更舒适—— 倍思…

LDR6023S:革新USB Type-C接口的完美伴侣

一、引言 随着科技的发展&#xff0c;USB Type-C接口以其高速传输、正反插等特性逐渐取代了传统的USB接口。而在这一背景下&#xff0c;LDR6023S作为一款USB Type-C转音频快充芯片&#xff0c;凭借其卓越的性能和广泛的应用场景&#xff0c;成为了市场上备受瞩目的产品。本文将…

西门子PLC位逻辑指令学习(SCL语言)

R_TRIG 参数 功能 当CLK信号出现一个低电平到高电平的跳变时&#xff0c;输出Q导通一个周期。 实例 定义以下类型变量 "R_TRIG_DB"(CLK:"data".source,Q>"data".result); //当source输入出现低电平到高电平跳变&#xff0c;result信号…

「计算机网络」初识http协议

前言 HTTP协议——互联网发展的基石&#xff0c;从一个最简单的“helloworld”网页&#xff0c;到现在博客平台、视频网站都离不开HTTP协议的存在。随着互联网的发展&#xff0c;Web网页的设计也越发复杂&#xff0c;前后端开发的分工也越发明确&#xff0c;HTTP作为连接前后端…