算法面试——岛屿问题:岛屿数量、最大面积、周长
2026/7/27 23:12:20 网站建设 项目流程

岛屿问题的核心是 DFS 遍历二维数组,把连通的 1 标记为已访问。

一、岛屿数量

publicintnumIslands(char[][]grid){intcount=0;for(inti=0;i<grid.length;i++){for(intj=0;j<grid[0].length;j++){if(grid[i][j]=='1'){dfs(grid,i,j);count++;}}}returncount;}privatevoiddfs(char[][]grid,intr,intc){if(r<0||c<0||r>=grid.length||c>=grid[0].length||grid[r][c]!='1')return;grid[r][c]='0';// 标记已访问dfs(grid,r-1,c);dfs(grid,r+1,c);dfs(grid,r,c-1);dfs(grid,r,c+1);}

二、岛屿的最大面积

publicintmaxAreaOfIsland(int[][]grid){intmaxArea=0;for(inti=0;i<grid.length;i++){for(intj=0;j<grid[0].length;j++){if(grid[i][j]==1){maxArea=Math.max(maxArea,dfs(grid,i,j));}}}returnmaxArea;}privateintdfs(int[][]grid,intr,intc){if(r<0||c<0||r>=grid.length||c>=grid[0].length||grid[r][c]!=1)return0;grid[r][c]=0;return1+dfs(grid,r-1,c)+dfs(grid,r+1,c)+dfs(grid,r,c-1)+dfs(grid,r,c+1);}

三、岛屿的周长

publicintislandPerimeter(int[][]grid){for(inti=0;i<grid.length;i++){for(intj=0;j<grid[0].length;j++){if(grid[i][j]==1)returndfs(grid,i,j);}}return0;}privateintdfs(int[][]grid,intr,intc){if(r<0||c<0||r>=grid.length||c>=grid[0].length||grid[r][c]==0)return1;if(grid[r][c]==2)return0;grid[r][c]=2;returndfs(grid,r-1,c)+dfs(grid,r+1,c)+dfs(grid,r,c-1)+dfs(grid,r,c+1);}

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询