<数据结构/算法> leetcode hot100系列. 695.最大岛屿面积

[LeetCode hot 100] 695. 岛屿的最大面积

题目链接

我看这还是一个常考的题目。这种题适合用dfs,从每一个点向四周深度优先搜索,用一个visited数组保存每个点是否被访问过,如果访问过就不要重复计算了。如果访问到0,或者到界外了,就返回0,否则就是上下左右的面积之和再+1(自己本身还占一格)。遇到访问过的也是直接返回0,表示要么在这一次计算中重复访问了,要么就是之前在从别的点开始计算时已经计算过了。

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
int dfs(vector<vector<int>>& grid, int idx1, int idx2, vector<vector<bool>>& visited){
if(idx1 < 0 || idx1 >= grid.size() || idx2 < 0 || idx2 >= grid[0].size()){
return 0;
}
if(visited[idx1][idx2] || grid[idx1][idx2] == 0) return 0;
// cout<<idx1<<","<<idx2<<endl;
visited[idx1][idx2] = true;
return dfs(grid, idx1 - 1, idx2, visited) +
dfs(grid, idx1 + 1, idx2, visited) +
dfs(grid, idx1, idx2 - 1, visited) +
dfs(grid, idx1, idx2 + 1, visited) + 1;
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
vector<vector<bool>> visited;
for(int i = 0; i < grid.size(); i++){
vector<bool> tmp(grid[0].size(), false);
visited.push_back(tmp);
}
int maxArea = 0;
for(int i = 0; i < grid.size(); i++){
for(int j = 0; j < grid[0].size(); j++){
maxArea = max(maxArea, dfs(grid, i, j, visited));

}
}
return maxArea;
}
};

<数据结构/算法> leetcode hot100系列. 695.最大岛屿面积
http://example.com/2024/06/16/lc_695_最大岛屿面积/
Author
dingzr2001
Posted on
June 16, 2024
Licensed under