输入: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);
}
}
}
}
然后是dfs函数,在进入dfs后对每个访问的点进行标记,出口条件仍然是坐标越界或者当前点值为0或2(代表水域或者已访问过)
void dfs(vector<vector>& grid, int x, int y) {
if(x < 0 || x >= m || y < 0 || y >= n || grid[x][y] != 1 || grid[x][y] == 2) {
return;
}
grid[x][y] = 2;
dfs(grid, x + 1, y);
dfs(grid, x - 1, y);
dfs(grid, x, y + 1);
dfs(grid, x, y - 1);
}
这里还要注意一点,我们需要在访问并且标记完当前点后把count值+1,代表当前陆地面积值+1,下面是完整代码
完整代码:
class Solution {
public:
int m, n;
int count = 0;
void dfs(vector<vector>& grid, int x, int y) {
if(x < 0 || x >= m || y < 0 || y >= n || grid[x][y] != 1 || grid[x][y] == 2) {
return;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。
早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。