From a88741bf0a5e6faa44fc70735d32a41998bf4364 Mon Sep 17 00:00:00 2001 From: Xin-Sheng-5075 <2061461846@qq.com> Date: Tue, 6 Sep 2022 21:22:30 +0800 Subject: [PATCH] Signed-off-by: Xin-Sheng-5075 <2061461846@qq.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加 695.岛屿的最大面积 Java 版本 --- problems/0695.岛屿的最大面积.md | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/problems/0695.岛屿的最大面积.md b/problems/0695.岛屿的最大面积.md index e5567aec..e1f43e36 100644 --- a/problems/0695.岛屿的最大面积.md +++ b/problems/0695.岛屿的最大面积.md @@ -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); +} +``` \ No newline at end of file