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

news/2024/12/22 21:06:07/

前言

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


习题

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/news/1557291.html

相关文章

电商新品发布自动化:RPA 确保信息一致性与及时性【rap.top】

一、教学目标 让学员了解电商新品发布过程中的挑战以及 RPA 的概念和优势。掌握 RPA 在电商新品发布中确保信息一致性与及时性的方法和流程。培养学员运用 RPA 解决实际问题的能力。 二、教学重难点 重点 RPA 在电商新品发布中的应用场景。实现信息一致性与及时性的具体策略…

Mapbox-GL 的源码解读的一般步骤

Mapbox-GL 是一个非常优秀的二三维地理引擎&#xff0c;随着智能驾驶时代的到来&#xff0c;应用也会越来越广泛&#xff0c;关于mapbox-gl和其他地理引擎的详细对比&#xff08;比如CesiumJS&#xff09;&#xff0c;后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…

前端安全——敏感信息泄露

背景 随着 Web 应用程序的普及和用户数据价值的提升&#xff0c;前端安全问题日益凸显。前端应用中的敏感信息&#xff08;如用户名、密码、信用卡号等&#xff09;容易受到各种安全威胁&#xff0c;如 XSS 攻击、CSRF 攻击和源代码泄露等。这些威胁不仅影响用户体验&#xff…

skyler实战渗透笔记(十)—IMF

skyler实战渗透笔记&#xff1a; 笔记是为了记录实战渗透学习过程&#xff0c;分享渗透过程思路与方法。 请注意&#xff1a; 对于所有笔记中复现的终端或服务器&#xff0c;都是自行搭建环境或已获授权渗透的。使用的技术仅用于学习教育目的&#xff0c;如果列出的技术用于…

Xcode 文件缺失:Missing submodule xxx

问题&#xff1a;警告或者报错&#xff1a;Missing submodule xxx 引用方式为: <XXXX/******.h> 即 <项目名/头文件名称.h> 原因&#xff1a;这种问题主要是项目名称和 文件&#xff08;主要是头文件 命名重复了&#xff09; 经过谷歌查询 原因是创建的库名称自动…

C# OpenCV机器视觉:尺寸测量

转眼就是星期一了&#xff0c;又到了阿强该工作的时候了&#xff01;阿强走进了他作为机器视觉工程师的办公室&#xff0c;准备迎接新一天的挑战。随着周末的结束&#xff0c;他心中暗想&#xff1a;“如果我能让机器像我一样聪明&#xff0c;那就太好了&#xff01;” 正当他…

React 底部加载组件(基于antd)

底部加载组件的意义在于提供一种流畅的用户体验&#xff0c;以便在用户滚动到页面底部时自动加载更多内容。这样可以让用户无需离开当前页面&#xff0c;就能够无缝地浏览更多的内容.通过底部加载组件&#xff0c;可以分批加载页面内容&#xff0c;减少一次性加载大量数据对页面…

qwt 之 QwtPlotMarker

QwtPlotMarker 是 Qwt 库中的一个类&#xff0c;用于在 QwtPlot 中添加标记点。这些标记可以是简单的线条、符号或者带有标签的图形元素&#xff0c;通常用来标注特定的数据点或位置。QwtPlotMarker 提供了多种属性来定制其外观和行为&#xff0c;例如位置、样式、颜色等。 主…