力扣-图论-19【算法学习day.69】

devtools/2024/12/25 23:33:01/

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.最大人工岛

题目链接:827. 最大人工岛 - 力扣(LeetCode)

题面:

分析:我最开始想用并查集做,将未改变的grid中的所有岛划分开来,然后遍历里面的0,看上下左右是否存在岛屿,如果存在求合并的大小并更新最大值,遇到的一个麻烦就是grid是二维数组,怎么将x和y换算成一个不会重复的哈希值,所以这个方法我没行通,灵神也是这个思路,不过是单独开一个集合来标记每个1属于哪个岛屿,多大,非常巧妙

灵神代码:

java">class Solution {private static final int[][] DIRS = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int largestIsland(int[][] grid) {int n = grid.length;List<Integer> area = new ArrayList<>();// DFS 每个岛,统计各个岛的面积,记录到 area 列表中for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 1) {area.add(dfs(grid, i, j, area.size() + 2));}}}// 特判没有岛的情况if (area.isEmpty()) {return 1;}int ans = 0;Set<Integer> s = new HashSet<>();for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] != 0) {continue;}s.clear();int newArea = 1;for (int[] dir : DIRS) {int x = i + dir[0];int y = j + dir[1];if (0 <= x && x < n && 0 <= y && y < n && grid[x][y] != 0 && s.add(grid[x][y])) {newArea += area.get(grid[x][y] - 2); // 累加面积}}ans = Math.max(ans, newArea);}}// 如果最后 ans 仍然为 0,说明所有格子都是 1,返回 n^2return ans == 0 ? n * n : ans;}private int dfs(int[][] grid, int i, int j, int id) {grid[i][j] = id; // 记录 (i,j) 属于哪个岛int size = 1;for (int[] dir : DIRS) {int x = i + dir[0];int y = j + dir[1];if (0 <= x && x < grid.length && 0 <= y && y < grid.length && grid[x][y] == 1) {size += dfs(grid, x, y, id);}}return size;}
}

 后言

上面是力扣图论专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!

 


http://www.ppmy.cn/devtools/145391.html

相关文章

乐乐音乐Flutter版

简介 乐乐音乐Flutter版主要是基于Flutter Desktop框架开发的音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词、trc歌词、zrce歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 编译环境 Flutter:ideaIU-2024.1.4 参考地址 多…

k8s创建单例redis设置密码

在 Kubernetes (k8s) 中创建一个带密码的单例 Redis 部署&#xff0c;你可以通过定义一个包含 Redis 容器、服务(Service)以及必要配置(如密码设置)的 YAML 文件来实现。以下是一个基本的示例&#xff0c;展示了如何配置这些组件。 1. 创建 Redis 部署(Deployment) 首先&#x…

vivado 覆盖ip核默认生成的xdc约束

目录 简介 默认绑定管脚的IP核 总结 简介 本文介绍了解决Vivado中PCIe IP核自动生成的只读xdc文件与用户自定义xdc文件冲突的问题。通过设置空位置约束来覆盖原有的IP核引脚分配,实现了自定义的引脚绑定。并给出了适用于AX7103开发板的具体配置实例。 默认绑定管脚的IP核 …

Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总

问题1&#xff1a;打包的过程中不断提示 &#xff1a;codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决&#xff1a;打开钥匙串&#xff0c;点击证书---显示简介---信任----改为始终信任 &#xff08;记住 &#xff1a;不能只修改钥匙的显示简介的…

workman服务端开发模式-应用开发-gateway长链接端工作原理

一、长链接的工作原理 Register类其实也是基于基础的Worker开发的。Gateway进程和BusinessWorker进程启动后分别向Register进程注册自己的通讯地址&#xff0c;Gateway进程和BusinessWorker通过Register进程得到通讯地址后&#xff0c;就可以建立起连接并通讯了。而Gateway进程…

【Ubuntu】如何轻松设置80和443端口的防火墙

说到 UFW&#xff08;也就是 Uncomplicated Firewall&#xff09;&#xff0c;这可是基于 Ubuntu 的 Linux 系统里自带的安全小能手。通常情况下它是被禁用的&#xff0c;但在服务器系统上它可能会处于激活并运行的状态。这就有可能阻止我们访问像 Apache 和 Nginx 这样的服务器…

网络架构与IP技术:4K/IP演播室制作的关键支撑

随着科技的不断发展&#xff0c;广播电视行业也在不断迭代更新&#xff0c;其中4K/IP演播室技术的应用成了一个引人注目的焦点。4K超高清技术和IP网络技术的结合&#xff0c;不仅提升了节目制作的画质和效果&#xff0c;还为节目制作带来了更高的效率和灵活性。那么4K超高清技术…

容联云孔淼:金融数智化深水区,从数字化工具到业务变革提效

12月12日&#xff0c;容联云成功举办主题为“步进新金融”2024数智金融应用论坛。 容联云副总裁兼诸葛智能创始人孔淼发表了《金融数智化深水区&#xff0c;从数字化工具到业务变革提效》主题演讲。深入探讨了金融行业数智化转型的现状与未来趋势&#xff0c;以及针对运营、销售…