news 2026/5/1 4:01:59

leetcode热题岛屿数量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode热题岛屿数量

给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:grid = [ ['1','1','1','1','0'], ['1','1','0','1','0'], ['1','1','0','0','0'], ['0','0','0','0','0'] ]输出:1

示例 2:

输入:grid = [ ['1','1','0','0','0'], ['1','1','0','0','0'], ['0','0','1','0','0'], ['0','0','0','1','1'] ]输出:3
/** * 深度优先求岛屿个数 * @param grid * @return */ public int numIslands(char[][] grid) { int count = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (grid[i][j] == '1') { deleteSideOne(grid,i,j); count++; } } } return count; } /** * 广度优先岛屿个数 * @param grid * @return */ public int numIslands1(char[][] grid) { int count = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (grid[i][j] == '1') { deleteSideOneDfs(grid,i,j); count++; } } } return count; } private void deleteSideOneDfs(char[][] grid, int i, int j) { Queue<int[]> list = new LinkedList<>(); list.add(new int[] {i,j}); if (!list.isEmpty()) { int[] cur = list.remove(); i = cur[0];j = cur[1]; if (inArea(grid,i,j) && grid[i][j] == '1') { grid[i][j] = '0'; list.add(new int[] {i+1,j}); list.add(new int[] {i-1,j}); list.add(new int[] {i,j+1}); list.add(new int[] {i,j-1}); } } } private void deleteSideOne(char[][] grid, int i, int j) { if (!inArea(grid,i,j) || grid[i][j] == '0') { return; } // 此时 = ‘1’ grid[i][j] = '0'; deleteSideOne(grid,i,j-1); deleteSideOne(grid,i,j+1); deleteSideOne(grid,i-1,j); deleteSideOne(grid,i+1,j); } /** * 岛屿的最大面积 * @param grid * @return */ 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) { int tempA = area(grid,i,j); res = Math.max(res,tempA); } } } return res; } private int area(int[][] grid, int i, int j) { // 超出网格,返回0 if (!inArea(grid, i, j)) { return 0; } // 如果不是岛屿,返回0 if (grid[i][j] != 1) { return 0; } // 递归计算相邻的是否岛屿(加上相邻的面积) return 1 + area(grid, i - 1, j) + area(grid, i + 1, j) + area(grid, j, j - 1) + area(grid, i, j + 1); } private boolean inArea(int[][] grid, int i, int j) { return i >= 0 && i < grid.length && j >= 0 && j < grid[0].length; } private boolean inArea(char[][] grid, int i, int j) { return i >= 0 && i < grid.length && j >= 0 && j < grid[0].length; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 21:45:23

【图像处理基石】什么是神经渲染?

前言 在计算机图形学和计算机视觉的交叉领域&#xff0c;神经渲染&#xff08;Neural Rendering&#xff09;正成为最热门的研究方向之一。它打破了传统渲染依赖手工设计规则的局限&#xff0c;用神经网络学习从数据到图像的映射&#xff0c;让“AI画画”“数字人重建”“场景生…

作者头像 李华
网站建设 2026/4/30 12:46:16

性能测试中关于硬件环境的测试

比如营销活动的服务器的部署规格&#xff1a; 部署规格 CPU&#xff1a;0.001~4 (Core) 内存&#xff1a;16384~16384(Mb) 6个POD测试要点&#xff1a;单个pod的性能指标摸底&#xff0c;6Pod 集群峰值容量测试&#xff0c;6Pod 集群 72 小时稳定性测试&#xff0c;6Pod 集群容…

作者头像 李华
网站建设 2026/4/30 20:04:51

微信小程序uniapp-vue新闻网站

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华
网站建设 2026/5/1 2:44:03

微信小程序uniapp-vue校园美食评论餐饮配送商家 配送员

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华
网站建设 2026/4/20 16:59:31

微信小程序uniapp-vue校园自动点餐系统带跑腿

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华