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.rhkb.cn/news/294267.html

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

相关文章

[ruby on rails] ruby使用vscode做开发

ruby LSP实现 ruby插件推荐用这个来实现&#xff0c;但是现在这个在加载文件索引时候&#xff0c;特别慢&#xff0c;时好时坏&#xff0c;所以现在推荐用Solargraph实现 ruby LSP要求ruby版本3以上&#xff0c;如果在旧版本中使用&#xff0c;需要指定bundleGemfile路径 旧版…

电脑win10系统更新后开机很慢,更新win10后电脑开机怎么变慢了

很多用户反映&#xff0c;更新win10后电脑开机怎么变慢了呢?现在动不动就要30几秒&#xff0c;以前都是秒开机的&#xff0c;要怎么设置才能提高开机速度?小伙伴们别着急&#xff0c;主要原因可能是关机设置中没有勾选启用快速启动&#xff0c;或者是开机启动设置的问题&…

Excel 隔几行批量插入空白行

例如如下表格&#xff0c;每隔6行插入一行数据&#xff1a; 1&#xff09;第7个单元格输入1 2&#xff09;选中6个单元格&#xff0c;然后双击填充数据&#xff1a; 3&#xff09;F5 找到常量 Ctrlshift 复制插入的数据&#xff0c;然后选中数据 按F5&#xff0c;定位到空值

两数之和-考察哈希表的运用

题目 给定一个整数数组 n u m s nums nums和一个整数目标值 t a r g e t target target&#xff0c;请你在该数组中找出和为目标值 t a r g e t target target的那 两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同…

网络基础——ISIS

名词 ISIS&#xff1a;中间系统到中间系统&#xff0c;优先级是15集成化ISIS&#xff1a;这是在优化后&#xff0c;可以使用在OSI模型上的NET地址&#xff1a;由区域ID、系统ID和SEL组成&#xff0c;一台设备上最多配置3个NET地址&#xff0c;条件是区域号要不一致&#xff0c;…

使用VM搭建Linux服务器局域网

最近在了解一些LAN相关的内容&#xff0c;抱着学习的心态就使用了VM安装Linux虚拟机进行组建LAN&#xff08;局域网&#xff09;的测试。 一、虚拟机网络规划 下面是我安装的虚拟机网络配置 虚拟机编号 IP地址 子网掩码 网络连接 1 192.168.164.100 255.255.255.0 NAT…

golang语言系列:Git

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要对编程通用技能Git进行学习 1.为什么使用版本控制系统 版本控制系统可以解决的问题 代码备份很重要版本控制很重要协同工作很重要责任追溯很重要 常见的版本控制系统 GitS…

ES学习日记(七)-------Kibana安装和简易使用

前言 首先明确一点&#xff0c;Kibana是一个软件&#xff0c;不是插件。 Kibana 是一款开源的数据分析和可视化平台&#xff0c;它是 Elastic stack 成员之一&#xff0c;设计用于和Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索&#xff0c;…

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(…

服务器设置了端口映射之后外网还是访问不了服务器

目录 排查思路参考&#xff1a; 1、确认服务是否在运行 2、确认端口映射设置是否正确 3、使用防火墙测试到服务器的连通性 4、检查服务内部的配置 5、解决办法 6、学习小分享 我们在一个完整的网络数据存储服务系统设备中都会存有业务服务器、防火墙、交换机、路由器&a…

穿山甲广告平台SDK接入效果怎么样?

广告收入是大多数开发者的应用变现收入来源&#xff0c;如何进行流流量变现是从应用设计之初就需要开发者思考的问题。 穿山甲广告平台作为国内第三方广告变现平台&#xff0c;是不少开发者选择的对接平台。 穿山甲广告平台的广告类型较多&#xff0c;有信息流&#xff0c;ba…

【单片机 5.3开关检测】

文章目录 前言一、5.3开关检测1.1没按键按下的1.2有按键按下的 二、改进1.改进 三、独立键盘3.1为什么要取反3.2 实用的按键 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 课程需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xf…

VScode 集成终端设置默认打开当前文件夹 mac系统

一.快捷键设置 搜索 openInIntegratedTerminal 如图&#xff1a; 二.设置cmd 默认打开位置 点击设置 搜索 ntegrated:cwd 如下图&#xff1a; 三.查看ip 快捷指令&#xff1a; ipconfig getifaddr en0

前端性能优化-Table渲染速度优化

教务系统-排课页面性能优化总结 一、前言 在公司教务系统中,排课页面慢的令人发指,在某些情况由于数据量大导致页面主进程卡死,遂组织进行一次排查优化,现记录一下 二、效果对比 以下数据均为UAT环境 Performence对比 更改前: 主进程渲染时间为 8s 教务系统-排课页面性…

HTTP和HTTPS谁传输数据更安全?

1.HTTP HTTP在传输数据时&#xff0c;通常都是明文传输&#xff0c;也就是传输的数据没有进行加密。在这种情况下&#xff0c;如果传输的是一些敏感数据&#xff0c;比如某银行卡密码&#xff0c;就很容易被别人截获到&#xff0c;这就对我们的个人利益产生了威胁。 HTTP传输数…

go优雅读取zip压缩包-进阶2

【前言】 看到这里就晓得了&#xff0c;之前那一一篇文章go优雅读取zip压缩包&#xff0c;依旧还是有些问题&#xff0c;接下来&#xff0c;我就开始描述下本文章讲述的内容&#xff1a; 面对需要多次读取多个zip压缩包里的指定文件内容&#xff0c;如何提升读取的速度&#x…

C++初阶:5.STL简介(了解)

STL简介&#xff08;了解&#xff09; 一.什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 二. STL的版本 原始版本 Alexander Stepan…

基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 5…

互联网轻量级框架整合之JavaEE基础II

编写本篇代码并实际执行之前请仔细阅读前一篇互联网轻量级框架整合之JavaEE基础I Servlet 在Servlet容器中&#xff0c;Servlet是最基础的组件&#xff0c;也可以把JSP当做Servlet&#xff0c;JSP的存在意义只在于方便编写动态页面&#xff0c;使Java语言能和HTML相互结合&…

【C++】vector系列力扣刷题日志(136.只出现一次的数字,118.杨辉三角,26.删除有序数组中的重复项,260.只出现一次的数字 |||)

目录 136.只出现一次的数字 118.杨辉三角 26.删除有序数组中的重复项 260.只出现一次的数字 ||| vector的详细介绍及用法这里就不过多赘述了&#xff0c;可以参考上一篇博客&#xff1a;vector的介绍及使用说明 136.只出现一次的数字 题目&#xff1a; 给你一个 非空 整数…