Leetcode——岛屿的最大面积

1. 题目链接:695. 岛屿的最大面积

2. 题目描述:

给你一个大小为 m x n 的二进制矩阵 grid

岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0

示例 1:

img

输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
输出:6
解释:答案不应该是 11 ,因为岛屿只能包含水平或垂直这四个方向上的 1 。

示例 2:

输入:grid = [[0,0,0,0,0,0,0,0]]
输出:0

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 50
  • grid[i][j]01

3. 解法(递归):

3.1 算法思路:

  1. 遍历整个矩阵,每当遇到一块土地的时候,就用深度优先遍历或者宽度优先遍历将与这块土地相连的整个岛屿的面积计算出出来
  2. 然后在搜索得到的所有岛屿面积求一个最大值即可
  3. 在搜索过程中,为了防止搜到重复的土地:
    1. 可以开一个同等规模的布尔数组,标记以下这个位置是否已经被访问过
    2. 也可以将原始矩阵的1修改成0,但是这样的操作会修改原始矩阵

3.2 算法流程:

主函数内:

  1. 遍历整个数组,发现一块没有遍历到的土地之后,就用dfs将于这块土地相连的岛屿的面积求出来
  2. 然后将面积更新到最终结果ret

深度搜索dfs中:

  1. 能够进到dfs函数中,说明是一个没遍历到的位置
  2. 标记一下已经遍历过,设置一个变量count,记录最终的面积
  3. 上下左右遍历四个位置:如果找到一块没有遍历到的土地,就将这块土地相连的岛屿面积累加到count
  4. 循环结束后,count中存的就是这块岛屿的面积,返回即可

3.3 C++算法代码:

class Solution {bool vis[51][51]; // 访问标记数组,用于记录某个位置是否已经访问过int m, n; // 网格的行数和列数int dx[4] = {0, 0, 1, -1}; // x轴方向的偏移量int dy[4] = {1, -1, 0, 0}; // y轴方向的偏移量int count; // 当前岛屿的面积
public:// 计算给定网格中最大的岛屿面积int maxAreaOfIsland(vector<vector<int>>& grid) {m = grid.size(), n = grid[0].size();int ret = 0; // 最大岛屿面积for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (!vis[i][j] && grid[i][j] == 1) { // 如果当前位置未被访问且为陆地count = 0; // 重置岛屿面积dfs(grid, i, j); // 进行深度优先搜索ret = max(ret, count); // 更新最大岛屿面积}}}return ret; // 返回最大岛屿面积}// 深度优先搜索函数,用于计算岛屿面积void dfs(vector<vector<int>>& grid, int i, int j) {count++; // 当前位置为陆地,岛屿面积加一vis[i][j] = true; // 标记当前位置已访问for (int k = 0; k < 4; k++) { // 遍历四个方向int x = i + dx[k], y = j + dy[k]; // 计算下一个位置的坐标if (x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && grid[x][y] == 1) { // 如果下一个位置在网格范围内且未被访问且为陆地dfs(grid, x, y); // 继续深度优先搜索}}}
};

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

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

相关文章

【halcon】踩坑unin2

unin1 先说 unin1 这个函数 很好理解&#xff0c;将多个区域求并集&#xff0c;结果就是多个区域会变成一个区域。 unin1 经常和 closing_circle 这个函数连用。 这是应为 当多个区域变成一个区域之后&#xff0c;才能更好的完成闭操作。 unin2 按照思维惯性&#xff0c;看上…

IDEA安装配置SceneBuilder

1、下载 SceneBuilder 地址&#xff1a; Scene Builder - Gluon ​​​​​​​ Scene Builder | JavaFX中文官方网站 选择符合自己系统版本&#xff0c;JAVA版本的下载 2、安装SceneBuilder 执行下载的 SceneBuilder 安装程序&#xff0c;并按照安装向导的指示进行…

iOS WKWebView H5微信、支付宝支付跳转

iOS客户端实现嵌入H5进行支付跳转到客户端&#xff0c;支付完成后再跳转回自己的App时,解决WKWebView无法跳转回APP的BUG. 一、支付宝 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void…

力扣203:移除链表元素

力扣203&#xff1a;移除链表元素 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&a…

如何掌握项目管理的5个阶段?

项目管理协会&#xff08;PMI&#xff09;创建了一个五步项目管理流程&#xff0c;即从启动、规划、执行、监控到结束&#xff0c;为项目经理更好地管理项目提供了现成的基础。如果你正为范围蔓延、返工或项目总体混乱而苦恼&#xff0c;那么遵循项目管理的五个阶段&#xff0c…

【Java 进阶篇】Java与JQuery选择器:解锁前端开发的魔法大门

在前端开发的世界中&#xff0c;选择器是我们与HTML文档进行互动的钥匙&#xff0c;而Java和JQuery则为我们提供了强大的工具&#xff0c;使得前端开发不再是一个艰深的谜题。本篇博客将围绕Java与JQuery选择器展开&#xff0c;深入解析选择器的奥秘&#xff0c;为你打开前端开…

使用matlab实现图像信号的色彩空间转换

利用matlab对图像信号进行读取&#xff0c;并对RGB空间进行转换&#xff0c;如转换到HSI空间等。 下面的这个代码是在使用了rgb2hsi()方法失败后&#xff0c;进行修改的。 rgb2hsi(img)这个方法可以将RGB图像转换为HIS图像&#xff1b;但是爆出了 Untitled5(line 5)hsi rgb2h…

多数据源切换

多数据源切换 1.jdbcTemplate2.使用切面3.mybatis层次的多数据源4.spring的dynamic自动注入 项目中经常会有多个数据源&#xff0c;那么如何处理呢 有4种方法 准备&#xff1a; 创建两个数据库 CREATE SCHEMA test DEFAULT CHARACTER SET utf8mb4 ; CREATE SCHEMA school DEFA…

Power Automate-调用API

API:汇率查询API免费接口&#xff0c;汇率查询API接口付费定制-进制数据 在输出结果之前添加操作&#xff0c;搜索HTTP&#xff0c;点击绿色的图标 选择第一个 查看API详情对应填入到HTTP操作中&#xff0c;比如方法&#xff08;请求方法&#xff09;、URL&#xff08;接口地址…

Javaweb之Vue的概述

2.1 Vue概述 通过我们学习的htmlcssjs已经能够开发美观的页面了&#xff0c;但是开发的效率还有待提高&#xff0c;那么如何提高呢&#xff1f;我们先来分析下页面的组成。一个完整的html页面包括了视图和数据&#xff0c;数据是通过请求 从后台获取的&#xff0c;那么意味着我…

[Linux] 网络文件共享服务

一、存储类型 存储类型可分为三类&#xff1a;DAS&#xff08;直连式存储&#xff09;,NAS&#xff08;网络附加存储&#xff09;,SAN&#xff08;存储区域网络&#xff09;。 1.1 DAS 定义&#xff1a; DAS是指直连存储&#xff0c;即直连存储&#xff0c;可以理解为本地文…

防爆五参数气象仪的科技力量

WX-FBQ2 随着科技的不断进步&#xff0c;气象监测设备也在不断升级和完善。 防爆五参数气象仪是一种可以同时监测温度、湿度、压力、风速和风向五个基本气象参数的仪器。它采用了气象监测技术&#xff0c;不仅可以实时监测气象数据&#xff0c;还可以对数据进行分析和处理。 …