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 ...
随机推荐
- vim初探
https://github.com/spf13/spf13-vim 安装了此博主的开源项目. :vsp ——竖分屏 :sp ——横分屏
- linux(centos)下安装ffmpeg
[备忘]windows环境下20行php代码搞定音频裁剪 上次我的这篇文章将了windows下web中如何操作ffmpeg的文章,这里则记录下linux(centos)下的安装 首先:我花了中午大概1 ...
- 如何使用indexdb
一.实现步骤 1)获得indexedDB对象 if (!window.indexedDB) { window.indexedDB = window.mozIndexedDB || window.web ...
- c#通过app.manifest使程序 右键 以管理员身份运行
c#通过app.manifest使程序以管理员身份运行 时间:2013-06-27 22:47来源:网络收集+本站整理 作者:jtydl 点击: 1175 次 微软在Windows Vista开始引入 ...
- [Java][Web]Web 工程中的各类地址的写法
// 1. request.getRequestDispatcher("/index.html").forward(request,response); // 以 / 开头,对于浏 ...
- Vim编辑器基本操作学习(二)
操作符+位移 x命令可以删除一个字符,4x可以删除4个字符. dw可以删除一个word,w事实上是向后移动一个word的命令:dw可以接上一个任意一个位移命令,它将删除从当前光标开始到位移终点处的文本 ...
- Windows Server 2012十大实用快捷键组合
在本文中,我们将一起体验快捷键如何在微软最新服务器操作系统中帮助用户提升工作效率. 微软推出的最新服务器操作系统比我印象中任何一款前代Windows Server产品都依赖于键盘操作——当然,这些产品 ...
- 线程之 CPthon中的GIL与Lock的分析与解决办法
Cpython 中的GIL锁介绍 1. 前戏 In CPython, the global interpreter lock, or GIL, is a mutex that prevents mul ...
- Julia - 字符串判断函数
isascii() 判断是否是 ascii 码,返回 Bool 值 julia> isascii('a') true julia> isascii('α') false julia> ...
- Ubuntu13.10:密码忘记了怎么办?
重启ubuntu系统,开机时长按shift按键进入GRUB菜单,选择第二个高级模式. 新版的UBUNTU系统居然启用了GRUNB2.0的内核!虽然传说相当的牛X,但是用起来感觉就是非常看不清楚字体,要 ...