岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
示例1:
输入:grid = [[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:
输入:grid = [[0,0,0,0,0
真题解析、进阶学习笔记、最新讲解视频、实战项目源码、学习路线大纲
详情关注公中号【编程进阶路】
,0,0,0]]
输出:0
提示
-
m == grid.length
-
n == grid[i].length
-
1 <= m, n <= 50
-
grid[i][j] 为 0 或 1
首先这是一个大小为 m x n 的二进制矩阵 grid,这就说明矩阵内只有01两个数值,1代表陆地,0代表水域,这题就是让我们求解连接在一起的1的最大数量,并且连接方向也给出了是水平或者竖直的四个方向,这题和昨天那题岛屿的周长比较类似,我们也需要对这个矩阵进行一次遍历,每次遍历到的点如果是1且未访问过则进入dfs,然后在访问完当前点之后再访问当前点的上下左右四个方向的点,递归搜索判断,下面我们进入代码。
首先是主函数中的对矩阵的遍历
class Solution {
int m, n;
int maxAreaOfIsland(vector<vector>& grid) {
m = int(grid.size());
n = int(grid[0].size());
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
dfs(grid, i, j);
}
}
}
}
然后我们需要记录每一次dfs搜索的陆地大小并且与当前记录的最大大小进行一个求较大值(当前的大小我们用res记录,赋初值为-1是为了让它为最小)因为这个记录数需要在主函数且dfs函数里都出现,所以跟m,n一样定义到类里
class Solution {
int m, n;
int count = 0;
int maxAreaOfIsland(vector<vector>& grid) {
m = int(grid.size());
n = int(grid[0].size());
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
count = 0;
dfs(grid, i, j);
res = max(res, count);
}
}
}
}
文末
篇幅有限没有列举更多的前端面试题,小编把整理的前端大厂面试题PDF分享出来,一共有269页