岛屿的最大面积(Java)
给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个岛屿是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)
示例 1:
[[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:
[[0,0,0,0,0,0,0,0]]
对于上面这个给定的矩阵, 返回 0。
注意:给定的矩阵grid的长度和宽度都不超过 50。
package com.loo;
import java.util.LinkedList;
import java.util.Queue;
public class MaxIslandArea {
public static int[] DX = new int[] {1 , 0 , -1 , 0};
public static int[] DY = new int[] {0 , 1 , 0 , -1};
public static void main(String[] args) {
int[][] grid1 = {
{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}
};
int[][] grid2 = new int[][] {{0,0,0,0,0,0,0,0}};
System.out.println(getMaxIslandArea1(grid1));
System.out.println(getMaxIslandArea2(grid2));
}
// 深度优先。一个土地上,以 4 个方向探索与之相连的每一个土地(以及与这些土地相连的土地),那么探索过的土地总数将是该连通形状的面积。
// 为了确保每个土地访问不超过一次,每次经过一块土地时,将这块土地的值置为 0。这样就不会多次访问同一土地。
public static int getMaxIslandArea1(int[][] grid) {
if (grid == null || grid.length==0 || grid[0].length==0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
int maxArea = 0;
for (int i=0;i<m;i++) {
for (int j=0;j<n;j++) {
if (grid[i][j]==1) {
maxArea = Math.max(maxArea, dfs(grid , i , j));
}
}
}
return maxArea;
}
public static int dfs(int[][] grid , int x , int y) {
if (x<0 || x>=grid.length || y<0 || y>=grid[0].length || grid[x][y]==0) {
return 0;
}
grid[x][y] = 0;
int result = 1;
for (int k=0;k<4;k++) {
int dx = x + DX[k];
int dy = y + DY[k];
result += dfs(grid , dx , dy);
}
return result;
}
// 广度优先
public static int getMaxIslandArea2(int[][] grid) {
if (grid == null || grid.length==0 || grid[0].length==0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
int maxArea = 0;
for (int i=0;i<m;i++) {
for (int j=0;j<n;j++) {
int area = 0;
if (grid[i][j]==1) {
area++;
grid[i][j] = 0;
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(i*n+j);
while (!queue.isEmpty()) {
int value = queue.poll();
int x = value/n;
int y = value%n;
for (int k=0;k<4;k++) {
int dx = x + DX[k];
int dy = y + DY[k];
if (dx<0 || dx>=grid.length || dy<0 || dy>=grid[0].length || grid[dx][dy]==0) {
continue;
}
if (grid[dx][dy]==1) {
queue.add(dx*n+dy);
area++;
grid[dx][dy] = 0;
}
}
}
}
maxArea = Math.max(maxArea, area);
}
}
return maxArea;
}
}
岛屿的最大面积(Java)相关推荐
- 求岛屿的最大面积java
求岛屿的最大面积 给定一个包含了一些 0 和 1 的非空二维数组 grid . 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻.你可 ...
- LeetCode 695. 岛屿的最大面积【c++/java详细题解】
目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定一个包含了一些 0 和 1 的非空二维数组 grid . 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相 ...
- 力扣(Leetcode)695. 岛屿的最大面积(Java)带注释
leetcode刷题695. 岛屿的最大面积 1.题目描述 2.解法 1.DFS(深度优先搜索) 2.DFS + 栈 1.题目描述 给你一个大小为 m x n 的二进制矩阵 grid . 岛屿 是由一 ...
- java定义一个类计算圆的半径,C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计...
导航:网站首页 > C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计 C++编程:定义一个圆类要求属性为半径, ...
- 岛屿类-网格类问题-DFS | 力扣695. 岛屿的最大面积
思路参考上文: 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量 本文讲解695. 岛屿的最大面积问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 题目 给定一个包含了一些 0 和 1 ...
- 二维矩阵中的最大矩形面积--java实现
一.原题: 给你一个二维矩阵,权值为False和True,找到一个最大的矩形,使得里面的值全部为True,输出它的面积. 样例: 给你一个矩阵如下: [[1, 1, 0, 0, 1],[0, 1, 0 ...
- 岛屿最大面积 leetcode Java_LeetCode:岛屿的最大面积
岛屿的最大面积 题目叙述: 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包 ...
- 695. 岛屿的最大面积
岛屿的最大面积 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包围着. 找到 ...
- 算法编程10:岛屿的最大面积
描述 给定一个包含了一些 0 和1的非空二维数组grid,一个岛屿是由四个方向 (水平或垂直) 的1(代表土地) 构成的组合. 你可以假设二维矩阵的四个边缘都被水包围着.找到给定的二维数组中最大的岛屿 ...
最新文章
- 源码 linux下编译_Linux云服务器软硬链接及源码编译安装python3.8的一些备注
- 「Python」Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-build-Yt_rRN/grpcio
- 小学二年几手工计算机的制作,小学二年级创意手工制作方法
- 一文读懂层次聚类(Python代码)
- 【Beam Search】seq2seq中的beam search算法过程
- WINX的消息分派机制(续)
- js书写原生ajax,JS 原生ajax写法
- Win10 LTSC版如何安装应用商店Microsoft Store
- 大疆aeb连拍_一张图带你轻松读懂摄影必备专业术语~
- 怎么在b站引流?b站怎么吸粉?b站引流技巧和方法
- 2020年创业风口:社交电商
- vue使用FullCalendar插件实现会议预约功能,个性化实现周视图
- veket linux输入法,智能通用输入法平台(SCIM for veket)
- 读论文《Natural Language Processing (Almost) from Scratch》
- Esri总裁用96页PPT告诉你GIS的未来将如何发展,而我们又该为此如何准备
- 让ChatGPT干正事,如何查找靠谱的真文献写论文
- service引入其他dao报错_绝了!这款工具让SpringBoot不再需要Controller、DAO、Mapper!...
- vue--mixin混入以及虚拟DOM和diff算法
- 地球坐标 火星坐标 百度坐标 相互转换
- 深度学习基础论文学习
热门文章
- GreatSQL配置到系统systemd服务
- 分享《Essential Linux Device Drivers》中文版高清电子版
- 桌面cpu与服务器cpu天梯,台式CPU性能怎么看?桌面CPU天梯图2018年1月更新版
- UNI-APP安卓本地打包详细教程(保姆级)
- php正则表达式表情,php正则表达式储存展示表情字符的方法
- 阿里云镜像恢复,镜像取证
- java 雷达反射面积_请问:如何使用基本反射率雷达图中的dBZ值判断天气情况?比如多云、雷雨、晴等。谢谢!...
- 设计并编写代码自动格斗类游戏
- 辅材先生之打开传统向互联网+辅材这把锁
- 南邮 OJ 1128 An Industrial Spy