695. Max Area of Island最大岛屿面积
[抄题]:
求最多的联通的1的数量
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.
[暴力解法]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
- 以为棋盘问题都是向四周扩展、bfs,其实本质上不是对棋盘元素操作,本质上是求数量最大,还是DFS先求所有
- 图中居然也能用二叉树的traverse嵌套,头一次见
[一句话思路]:
某点的面积是由四周的点构成的,四周的点的面积又是由四周的点构成的,所以用traverse递归嵌套。
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
为防止重复计算,把1的点先标记为0,使其不再符合条件。第一次见。

[一刷]:
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
没看出来把= 写成 == 了,不应该
[总结]:
本质上不是对棋盘元素操作,本质上是求数量最大,还是DFS先求所有
[复杂度]:Time complexity: O(n2) Space complexity: O(n2)
[英文数据结构或算法,为什么不用别的数据结构或算法]:
本质上不是对棋盘元素操作,本质上是求数量最大,还是DFS先求所有
[关键模板化代码]:
public int areaOfIsland(int i, int j, int[][] grid) {
//valid first, == 1 second
if (0 <= i && i < grid.length && 0<= j && j < grid[0].length && grid[i][j] == 1) {
//restore to 0 to avoid repeat
grid[i][j] = 0;
//count area
return 1 + areaOfIsland(i - 1, j, grid) + areaOfIsland(i + 1, j, grid) + areaOfIsland(i, j - 1, grid) + areaOfIsland(i, j + 1, grid);
}
//if not 1, default case : return 0
return 0;
}
traverse嵌套
[其他解法]:
并查集,太麻烦了
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
class Solution {
public int maxAreaOfIsland(int[][] grid) {
//corner case
if (grid.length == 0 || grid[0].length == 0) {
return 0;
}
//compare all areas
int max = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
max = Math.max(max, areaOfIsland(i, j, grid));
}
}
return max;
}
public int areaOfIsland(int i, int j, int[][] grid) {
//valid first, == 1 second
if (0 <= i && i < grid.length && 0<= j && j < grid[0].length && grid[i][j] == 1) {
//restore to 0 to avoid repeat
grid[i][j] = 0;
//count area
return 1 + areaOfIsland(i - 1, j, grid) + areaOfIsland(i + 1, j, grid) + areaOfIsland(i, j - 1, grid) + areaOfIsland(i, j + 1, grid);
}
//if not 1, default case : return 0
return 0;
}
}
695. Max Area of Island最大岛屿面积的更多相关文章
- leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions
两种方式处理已经访问过的节点:一种是用visited存储已经访问过的1:另一种是通过改变原始数值的值,比如将1改成-1,这样小于等于0的都会停止. Number of Islands 用了第一种方式, ...
- [leetcode]python 695. Max Area of Island
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- leetcode 695 Max Area of Island 岛的最大面积
这个题使用深度优先搜索就可以直接遍历 DFS递归方法: class Solution { public: vector<vector<,},{,-},{,},{,}}; int maxAr ...
- 200. Number of Islands + 695. Max Area of Island
Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...
- 【LeetCode】695. Max Area of Island 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:BFS 日期 题目地址:ht ...
- LeetCode 695. Max Area of Island (岛的最大区域)
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- 【easy】695. Max Area of Island
题目: Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) ...
- 695. Max Area of Island@python
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- [Leetcode]695. Max Area of Island
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
随机推荐
- OPCDAAuto.dll 的一个坑
最近项目需要对SCADA系统的下位机采集实时数据,常见做法是两种,一种采用ModBus RTU/TCP协议直接通过支持ModBus的下位机通信,一种是通过OPC规范,使用厂商提供的OPC Server ...
- Ninject Lazy Load
namespace LayzyLoadTest { [TestClass] public class UnitTest1 { private IKernel InitKernel() { Ninjec ...
- Firewalld的panic模式
原文地址:http://www.excelib.com/article/289/show Firewalld有一种Panic模式,Panic的单词含义为“恐慌”.“惊慌”,在firewalld中他表示 ...
- Tomcat常用设置
远程Dbug调试: TOMCAT配置(只需设置一次): 1.在服务器的$TOMCAT_HOME/bin/catalina.sh中增加: CATALINA_OPTS="-server -Xde ...
- http的含义
HTTP是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议.在Internet上的Web服务器上存放的都是 超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息.H ...
- HDU1257题解
解题思路:这题的本质就是:求一个给定的数字序列中,非递增(或非递减)子序列的最少的条数. 思维误区:本题很容易被样例坑,以为是直接求跳跃点(i < j && ai < aj ...
- [置顶]
ubuntu版本很老,apt-get update更新失败时(W: Failed to fetch ...)------如何创建新的sources.list
在说这个解决方案之前,我先说下,目前遇到的问题: 我使用 sudo apt-get update 之后,更新失败.具体原因如下: W: Failed to fetch http://cn.archiv ...
- netcore中使用log4net日志
第一.控制台程序中使用log4net static void Main(string[] args) { ILoggerRepository repository = LoggerManager.C ...
- Navicat use HTTP Tunnel
Apply OS: Windows, macOS, Linux Apply Navicat Product: Navicat for MySQL, Navicat for PostgreSQL, Na ...
- form中input是类型有哪些?
text:文本框 password:密框码 radio:单选按钮 checkbox:复选框 file:文件选择域 hidden:隐藏域 button:按钮 reset:重置按钮 submit:表单提交 ...