mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Signed-off-by: Xin-Sheng-5075 <2061461846@qq.com>
增加 695.岛屿的最大面积 Java 版本
This commit is contained in:
@ -167,3 +167,36 @@ public:
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
# 其它语言版本
|
||||
|
||||
## Java
|
||||
|
||||
这里使用深度优先搜索 DFS 来完成本道题目。我们使用 DFS 计算一个岛屿的面积,同时维护计算过的最大的岛屿面积。同时,为了避免对岛屿重复计算,我们在 DFS 的时候对岛屿进行 “淹没” 操作,即将岛屿所占的地方置为 0。
|
||||
|
||||
```java
|
||||
public int maxAreaOfIsland(int[][] grid) {
|
||||
int res = 0;
|
||||
for(int i = 0;i < grid.length;i++){
|
||||
for(int j = 0;j < grid[0].length;j++){
|
||||
//每遇到一个岛屿就计算这个岛屿的面积同时”淹没“这个岛屿
|
||||
if(grid[i][j] == 1){
|
||||
//每次计算一个岛屿的面积都要与res比较,维护最大的岛屿面积作为最后的答案
|
||||
res = Math.max(res,dfs(grid,i,j));
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
public int dfs(int[][] grid,int i,int j){
|
||||
//搜索边界:i,j超过grid的范围或者当前元素为0,即当前所在的地方已经是海洋
|
||||
if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) return 0;
|
||||
//淹没土地,防止后续被重复计算
|
||||
grid[i][j] = 0;
|
||||
//递归的思路:要求当前土地(i,j)所在的岛屿的面积,则等于1加上下左右相邻的土地的总面积
|
||||
return 1 + dfs(grid,i - 1,j) +
|
||||
dfs(grid,i + 1,j) +
|
||||
dfs(grid,i,j + 1) +
|
||||
dfs(grid,i,j - 1);
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user