java数据结构与算法刷题-----LeetCode695. 岛屿的最大面积

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

    • 1. 深度优先遍历
    • 2. 广度优先

在这里插入图片描述

1. 深度优先遍历

这不是找最短路径,而是找面积,所以深度优先更适合。

解题思路:时间复杂度O( r ∗ c r*c rc)r和c表示行列个数,也就是整张二维地图都遍历一边,空间复杂度O( r ∗ c r*c rc)
  1. 一行一行的遍历地图,如果发现当前结点 = 1表示陆地,就从当前坐标开始进行深度优先遍历
  2. 遍历过的结点将其标记为已访问,然后朝向上下左右四个方向依次继续深度优先遍历,并将结果相加。
代码

在这里插入图片描述

class Solution {public int maxAreaOfIsland(int[][] grid) {int max = 0;//保存答案for (int r = 0; r < grid.length; r++) {for (int c = 0; c < grid[0].length; c++) {//遍历地图if(grid[r][c]==1){//如果是陆地,就进入深度优先遍历,统计其陆地大小int res = dfs(grid,r,c);//dfsmax = Math.max(max,res);//如果当前陆地更大,就保存其为答案}}}return max;//返回最大陆地大小}//深度优先遍历int dfs(int[][] grid,int r,int c){int m = grid.length,n = grid[0].length;//地图边界if(r<0||c<0||r>=m||c>=n) return 0;//如果当前坐标不在地图中,返回0,表示当前坐标陆地面积为0if(grid[r][c]!=1) return 0;//如果当前坐标在地图中,但是是海洋(0)或者已经统计过的陆地(2)的话,也返回0表示当前坐标陆地面积为0grid[r][c]=2;//如果当前坐标是陆地,将其置为2,表示已经访问过//然后从当前坐标向4个方向走一步继续统计。return 1+dfs(grid,r-1,c)+dfs(grid,r+1,c)+dfs(grid,r,c-1)+dfs(grid,r,c+1);}}

2. 广度优先

这题不太适合广度优先,代码会比较多,没有深度优先遍历简洁,并且需要使用Java自带容器Queue,会比深度优先遍历的底层栈空间慢很多

解题思路:时间复杂度O( r ∗ c r*c rc),空间复杂度O( r ∗ c r*c rc)
  1. 和法一深度优先遍历一样,就是将代码转换为广度优先而已
代码

在这里插入图片描述

class Solution {int[][] grid;//保存地图int m,n;//地图边界final int[][] directions = new int[][]{{-1, 0}, {1, 0}, {0, 1}, {0, -1}};//方向参数,上下右左public int maxAreaOfIsland(int[][] grid) {this.grid = grid;this.m = grid.length; this.n = grid[0].length;//获取边界int result = Integer.MIN_VALUE;//保存最终结果for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid[i][j] == 1){int size = bfs(i, j);result = Math.max(size, result);}}}return result == Integer.MIN_VALUE ? 0 : result;}private int bfs(int x, int y){int area = 1;//当前坐标陆地面积Queue<int[]> queue = new ArrayDeque<>();//广度优先遍历queue.offer(new int[]{x, y});//当前坐标入队列grid[x][y] = 2;//将其标志为2,表示已经访问while(!queue.isEmpty()){//广度优先遍历int[] current = queue.poll();//出队列当前坐标for(int[] dir : directions){//4个方向各走一步//获取当前方向走一步后的坐标int nextX = current[0] + dir[0];int nextY = current[1] + dir[1];//如果下标没有越界,并且 = 1确定是陆地,就将其加入队列中if(nextX >= 0 && nextX < grid.length && nextY >= 0 && nextY < grid[0].length && grid[nextX][nextY] == 1){area++;//走一步,面积+1queue.offer(new int[]{nextX, nextY});//入队列grid[nextX][nextY] = 2;//标识为2,表示已经统计}}}return area;}
}

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

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

相关文章

蓝桥杯刷题第七天

这道题一开始看真的有点简单&#xff0c;但一开始跟着案例先入为主了&#xff0c;误以为是只有两个项目想着穷举完n个人&#xff0c;&#xff08;n1&#xff09;*&#xff08;n2&#xff09;/2种情况但后面发现项目不止两个&#xff0c;用链表来好像我也不会&#xff0c;用二维…

linux编辑器——vim使用方法

文章目录 linux编辑器——vim使用方法1. vim的基本概念2. vim的基本操作3. vim正常模式命令集4. vim末行模式命令集5. vim操作总结6.简单vim配置7.参考资料 linux编辑器——vim使用方法 vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的…

泛域名站群,泛域名程序

泛域名站群是一种利用大量类似的泛域名来建立多个网站&#xff0c;并通过这些网站链接到主网站&#xff0c;以提升主网站的排名和流量的策略。泛域名站群通常包含大量的子域名&#xff0c;这些子域名指向不同的页面&#xff0c;但它们的内容大部分是重复或相似的&#xff0c;目…

【Frida】【Android】08_爬虫之网络通信库okhttp3

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

编译和链接(基础速通版)

翻译环境和运行环境 前提解释 电脑是不能直接执行C语言的程序代码的&#xff0c;所依赖的是翻译环境进行一个源代码运行的时候需要经过翻译环境和运行环境的处理&#xff0c;才能得到你需要的可运行程序。 这里是源文件&#xff0c;也就是 .c文件&#xff0c;通过翻译环境得…

图解PyTorch中的torch.gather函数和 scatter 函数

前言 torch.gather在目前基于 transformer or query based 的目标检测中&#xff0c;在最后获取目标结果时&#xff0c;经常用到。 这里记录下用法&#xff0c;防止之后又忘了。 介绍 torch.gather 官方文档对torch.gather()的定义非常简洁 定义&#xff1a;从原tensor中获…

Ubuntu joystick 测试手柄 xbox

Ubuntu joystick 测试手柄 xbox 测试使用Ubuntu20.04 测试环境在工控机 安装测试 实际测试使用的手柄是北通阿修罗2pro 兼容xbox Ubuntu20.04主机 连接手柄或者无线接收器后查看是否已经检测到&#xff1a; ls /dev/input找到输入中的 js0 即为手柄输入 需要安装joysti…

注意力机制篇 | YOLOv8改进之添加DAT注意力机制

前言:Hello大家好,我是小哥谈。DAT(Vision Transformer with Deformable Attention)是一种引入了可变形注意力机制的视觉Transformer。在训练算法模型的时候,通过引入可变形注意力机制,改进了视觉Transformer的效率和性能,使其在处理复杂的视觉任务时更加高效和准确。�…

css酷炫边框

边框一 .leftClass {background: #000;/* -webkit-animation: twinkling 1s infinite ease-in-out; 1秒钟的开始结束都慢的无限次动画 */ } .leftClass::before {content: "";width: 104%;height: 102%;border-radius: 8px;background-image: linear-gradient(var(…

正则表达式引擎库汇合

1.总览表格 一些正则表达式库的对比 index库名编程语言说明代码示例编译指令1Posix正则C语言是C标准库中用于编译POSIX风格的正则表达式库 posix-re.cgcc posix-re.c 2PCRE库C语言提供类似Perl语言的一个正则表达式引擎库。 一般系统上对应/usr/lib64/libpcre.so这个库文件&am…

柔性数组详细讲解

动态内存函数的使用和综合实践-malloc&#xff0c;free&#xff0c;realloc&#xff0c;calloc-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/137075045 柔性数组存在的意义 柔性数组在编程语言中指的是可以动态调整大小的数组。相比固定大小的数组&#…

STL容器的一些操作(常用的,不全)

目录 string 1.string的一些创建 2.string 的读入和输出&#xff1a; 3.string的一些操作 4.彻底清空string 容器的函数 vector 1.vector的一些创建&#xff1a; 2.vector的一些操作&#xff1a; 3.vector的彻底清空并释放内存&#xff1a; queue 循环队列&#xff1…

兑换码生成算法

兑换码生成算法 兑换码生成算法1.兑换码的需求2.算法分析2.重兑校验算法3.防刷校验算法 3.算法实现 兑换码生成算法 兑换码生成通常涉及在特定场景下为用户提供特定产品或服务的权益或礼品&#xff0c;典型的应用场景包括优惠券、礼品卡、会员权益等。 1.兑换码的需求 要求如…

Pointnet++分类和分割数据集准备和实验复现

5.分类数据集Modelnet40及可视化 Modelnet40分类数据集 原始的modelnet40是off文件&#xff0c;是cad模型 OFF文件是一种用于存储三维对象信息的文件格式&#xff0c;全称为"Object File Format"。它主要用于存储几何体的顶点、边和面信息&#xff0c;以及可能的颜…

面对复杂多变的网络攻击,企业应如何守护网络安全

企业上云&#xff0c;即越来越多的企业把业务和数据&#xff0c;迁移到云端。随着云计算、大数据、物联网、人工智能等技术的发展&#xff0c;用户、应用程序和数据无处不在&#xff0c;企业之间的业务边界逐渐被打破&#xff0c;网络攻击愈演愈烈&#xff0c;手段更为多。 当前…

uni app 扫雷

闲来无聊。做个扫雷玩玩吧&#xff0c;点击打开&#xff0c;长按标记&#xff0c;标记的点击两次或长按取消标记。所有打开结束 <template><view class"page_main"><view class"add_button" style"width: 100vw; margin-bottom: 20r…

Docker容器监控之CAdvisor+InfluxDB+Granfana

介绍&#xff1a;CAdvisor监控收集InfluxDB存储数据Granfana展示图表 目录 1、新建3件套组合的docker-compose.yml 2、查看三个服务容器是否启动 3、浏览cAdvisor收集服务&#xff0c;http://ip:8080/ 4、浏览influxdb存储服务&#xff0c;http://ip:8083/ 5、浏览grafan…

如何利用CSS实现文字滚动效果

1. 使用CSS3的animation属性 CSS3的animation属性可以让元素在一段时间内不停地播放某个动画效果。我们可以利用这个特性来实现文字滚动效果。 我们需要定义一个包含所有需要滚动的文本的容器元素。比如&#xff1a; <div class"scroll-container"><p>…

JAV八股--redis

如何保证Redis和数据库数据一致性 关于异步通知中消息队列和Canal的内容。 redisson实现的分布式锁的主从一致性 明天继续深入看这个系列问题 介绍IO复用模型

【机器学习300问】59、计算图是如何帮助人们理解反向传播的?

在学习神经网络的时候&#xff0c;势必会学到误差反向传播&#xff0c;它对于神经网络的意义极其重大&#xff0c;它是训练多层前馈神经网络的核心算法&#xff0c;也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播&#xff0c;不妨借助一个工具——计…