Skip to content

Commit 53994bc

Browse files
Merge pull request youngyangyang04#1630 from Xin-Sheng-5075/master
增加 695.岛屿的最大面积 Java 版本
2 parents f437cbf + a88741b commit 53994bc

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

problems/0695.岛屿的最大面积.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,36 @@ public:
167167
};
168168

169169
```
170+
171+
# 其它语言版本
172+
173+
## Java
174+
175+
这里使用深度优先搜索 DFS 来完成本道题目。我们使用 DFS 计算一个岛屿的面积,同时维护计算过的最大的岛屿面积。同时,为了避免对岛屿重复计算,我们在 DFS 的时候对岛屿进行 “淹没” 操作,即将岛屿所占的地方置为 0。
176+
177+
```java
178+
public int maxAreaOfIsland(int[][] grid) {
179+
int res = 0;
180+
for(int i = 0;i < grid.length;i++){
181+
for(int j = 0;j < grid[0].length;j++){
182+
//每遇到一个岛屿就计算这个岛屿的面积同时”淹没“这个岛屿
183+
if(grid[i][j] == 1){
184+
//每次计算一个岛屿的面积都要与res比较,维护最大的岛屿面积作为最后的答案
185+
res = Math.max(res,dfs(grid,i,j));
186+
}
187+
}
188+
}
189+
return res;
190+
}
191+
public int dfs(int[][] grid,int i,int j){
192+
//搜索边界:i,j超过grid的范围或者当前元素为0,即当前所在的地方已经是海洋
193+
if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) return 0;
194+
//淹没土地,防止后续被重复计算
195+
grid[i][j] = 0;
196+
//递归的思路:要求当前土地(i,j)所在的岛屿的面积,则等于1加上下左右相邻的土地的总面积
197+
return 1 + dfs(grid,i - 1,j) +
198+
dfs(grid,i + 1,j) +
199+
dfs(grid,i,j + 1) +
200+
dfs(grid,i,j - 1);
201+
}
202+
```

0 commit comments

Comments
 (0)