图论part2|200. 岛屿数量、695. 岛屿的最大面积

ops/2025/3/14 11:06:23/

200、岛屿数量

  • 🔗:200. 岛屿数量 - 力扣(LeetCode)
  • 思路:
    • 1. 深度优先算法
      • 二叉树中dfs要素:1、访问左右相邻子节点 2、判断base case(终止条件)
      • 参考二叉树中的dfs看网格问题
      • 1. 网格的相邻节点:上下左右4个
      • 2.终止条件:超出格子的范围(--对应二叉树中全部为null的base case)
      • 3. 关键!!避免重复遍历,做过的格子需要进行标记
    • 2. 广度优先算法
      • 扫描整个二维网格,遇到为1的格子,加入队列当中,进行广度搜索
  • 代码
    • 深度优先算法
    • class Solution {public int numIslands(char[][] grid) {int area = 0;for(int i=0; i<grid.length; i++){for(int j=0; j<grid[0].length; j++){if(grid[i][j] == '1'){area++;dfs(grid, i, j);}}}return area;}private void dfs(char[][] grid, int r, int c){if(!isArea(grid,r,c)){return;}if(grid[r][c] != '1'){return;}grid[r][c] = '2';dfs(grid, r-1, c);dfs(grid, r, c-1);dfs(grid, r+1, c);dfs(grid, r, c+1);}boolean isArea(char[][] grid, int r, int c){return 0<=r && r < grid.length && 0 <= c && c < grid[0].length;}
      }
    • 广度优先算法
      • class Solution {/**广度优先搜索bfs扫描整个二维网络,如果一个位置为1,加入队列,进行广度优先搜索*/public int numIslands(char[][] grid) {if(grid == null || grid.length == 0){return 0;}int nr = grid.length;int nc = grid[0].length;int nums_islands = 0;for(int r=0; r < nr; ++r){for(int c = 0; c<nc; ++c){if(grid[r][c] == '1'){++nums_islands;grid[r][c] = '2';Queue<Integer> neighbors = new LinkedList<>();neighbors.add(r * nc + c);while(!neighbors.isEmpty()){int id = neighbors.remove();int row = id / nc;int col = id % nc;if (row - 1 >= 0 && grid[row-1][col] == '1') {grid[row-1][col] = '2';neighbors.add((row-1) * nc + col);}if (row + 1 < nr && grid[row+1][col] == '1') {grid[row+1][col] = '2';neighbors.add((row+1) * nc + col);}if (col - 1 >= 0 && grid[row][col-1] == '1') {neighbors.add(row * nc + col-1);grid[row][col-1] = '2';}if (col + 1 < nc && grid[row][col+1] == '1') {neighbors.add(row * nc + col+1);grid[row][col+1] = '2';}                      }}}}return nums_islands;}
         

695. 岛屿的最大面积

  • 🔗:695. 岛屿的最大面积 - 力扣(LeetCode)
  • 思路:深度优先搜索
  • 代码:
    class Solution {public int maxAreaOfIsland(int[][] grid) {if(grid.length==0||grid[0].length==0){return 0;}int res = 0;for(int r=0; r<grid.length; r++){for(int c=0; c<grid[0].length; c++){if(grid[r][c]==1){int a = area(grid, r, c);res = Math.max(res,a);}}}return res;}int area(int[][] grid, int r, int c){if (!(0 <= r && r < grid.length && 0 <= c && c < grid[0].length)) {return 0;}if(grid[r][c] != 1){return 0;}grid[r][c] = 2;return 1 + area(grid, r-1, c)+ area(grid, r+1, c)+ area(grid, r, c-1)+ area(grid, r, c+1);}
    }


http://www.ppmy.cn/ops/165648.html

相关文章

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 校园周边美食探索及分享平台结构图…

搭建【Dify】大语言模型(LLM)应用开发平台的详细指南

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Dify 2、Dify应用场景 二、Dify的核心功能与…

数字电子技术基础(二十八)——TTL门电路的静态功耗和动态功耗

1 静态功耗 门电路的工作需要直流电压源的支持&#xff0c;无论在模拟电路还是在数字电路中&#xff0c;只有在外加直流电源的作用下&#xff0c;半导体二极管具有单向导电性&#xff0c;晶体管的放大能力以及开关特性才能体现出来芯片的电源端正负级。芯片的电源端正负极如果…

神经网络完成训练的详细过程

神经网络完成训练的详细过程 一、神经网络的基本概念 神经网络是一种模拟人脑神经系统的计算模型&#xff0c;由大量的神经元&#xff08;节点&#xff09;和它们之间的连接&#xff08;权重&#xff09;组成。神经元接收输入信号&#xff0c;通过加权求和和激活函数的处理&a…

整合记录-持续

一、安装虚拟机:VirtualBox + vagrant 1、下载安装VirtualBox: https://www.virtualbox.org/,注意:要开启cpu虚拟化(查看是否已开启:任务管理器->性能->CPU->右下角显示虚拟化是否已开启) VirtualBox-7.1.6-167084-Win.exe 2、下载安装vagrant: Vagrant官方镜…

接口测试工具:postman详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Postman 是一款功能强大的 API 开发和测试工具&#xff0c;以下是一些高级用法的详细介绍和操作步骤。 一、环境和全局变量 环境变量允许你设置特定于环境&#…

ESP32之ADC采样

ADC采样即模数转换器,将模拟数据转换为数字数据。为什么要做这样的转化呢&#xff1f;想想原因是啥呢&#xff1f;对单片机来说肯定是数字信号处理方便啊。用ADC的话单片机肯定好处理一些&#xff0c;外界的数据肯定是不一样的&#xff0c;那么我们转换的话肯定是转成数字信号比…

如何查看g++最高支持到C++的哪个版本

2025年3月13日&#xff0c;周四晚上 要查看当前安装的 g 编译器支持的最高 C 版本&#xff0c;可以通过以下方法实现&#xff1a; 1. 查看 g 版本 首先通过命令获取当前 g 的版本号&#xff1a; g --version或更详细的构建信息&#xff1a; g -v输出示例&#xff08;假设当前…