博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
695. Max Area of Island - Medium
阅读量:6568 次
发布时间:2019-06-24

本文共 1989 字,大约阅读时间需要 6 分钟。

Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.

Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)

Example 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]]

Given the above grid, return 6. Note the answer is not 11, because the island must be connected 4-directionally.

Example 2:

[[0,0,0,0,0,0,0,0]]

Given the above grid, return 0.

Note: The length of each dimension in the given grid does not exceed 50.

 

dfs

设置一个global variable area表示岛的面积。遍历数组元素,如果遇到1,把area重置为0,dfs遍历其上下左右求面积,再与max比较取较大值作为结果。

dfs:终止条件是数组下标越界或者该点不为1。如果该点值为1,面积area增加1,把当前点赋值为0表示已访问过,然后遍历dirs数组对其上下左右的点进行同样的dfs操作。

时间:O(M*N),空间:O(M*N) for worst case dfs recursion depth

class Solution {    int[][] dirs = {
{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; //top, right, down, left int area; public int maxAreaOfIsland(int[][] grid) { if(grid == null || grid.length == 0) return 0; int max = 0; for(int i = 0; i < grid.length; i++) { for(int j = 0; j < grid[0].length; j++) { if(grid[i][j] == 1) { area = 0; dfs(grid, i, j); max = Math.max(max, area); } } } return max; } private void dfs(int[][] grid, int x, int y) { if(x < 0 || x > grid.length - 1 || y < 0 || y > grid[0].length - 1 || grid[x][y] == 0) return; area += 1; grid[x][y] = 0; for(int[] dir : dirs) { int xpos = x + dir[0]; int ypos = y + dir[1]; dfs(grid, xpos, ypos); } }}

 

转载于:https://www.cnblogs.com/fatttcat/p/10058471.html

你可能感兴趣的文章
springMvc时间格式化
查看>>
JS重复引用也会导致错误
查看>>
springMVC整合shiro权限框架示例与实践
查看>>
npm安装bower时报错 我已解决
查看>>
c#中ref与out的区别
查看>>
find命令使用
查看>>
spring集成rabbitmq遇到的问题
查看>>
迅雷设置
查看>>
Eclipse打包工具 FatJAR
查看>>
springmvc中url-url-pattern /和/*的区别
查看>>
从实际案例聊聊Java应用的GC优化
查看>>
LoadRunner模拟Json请求
查看>>
maven 命令创建多模块工程
查看>>
在VMWS中给xensenver添加硬盘命令
查看>>
ansible报错
查看>>
springmvc获取request对象
查看>>
基于LODOP的打印
查看>>
delphi 使用UDP收发数据
查看>>
git简单操作
查看>>
centos 网卡配置(入门级)
查看>>