当前位置: 首页 > news >正文

图论题总结

图论总结

  • hot100
    • 岛屿数量
    • 腐烂的橘子
    • 课程表
    • 实现 Trie (前缀树)

hot100

岛屿数量

题目链接:
200.岛屿数量
代码:

class Solution {boolean[][] visited;int[][] move = {{0,1},{0,-1},{1,0},{-1,0}};public void bfs(char[][] grid, int i, int j){Queue<int[]> deque = new LinkedList<>();deque.offer(new int[]{i,j});visited[i][j] = true;while(!deque.isEmpty()){int[] curr = deque.poll();int m = curr[0];int n = curr[1];for (int index = 0; index < 4; index ++){int nexti = m + move[index][0];int nextj = n + move[index][1];if (nexti < 0 || nexti >= grid.length || nextj < 0 || nextj >= grid[0].length) continue;if (!visited[nexti][nextj] && grid[nexti][nextj] == '1'){deque.offer(new int[]{nexti,nextj});visited[nexti][nextj] = true;}}} }public int numIslands(char[][] grid) {int res = 0;visited = new boolean[grid.length][grid[0].length];for (int i = 0; i < grid.length; i ++){for (int j = 0; j < grid[0].length; j ++){if (grid[i][j] == '1' && !visited[i][j]){res ++;bfs(grid,i,j);}}}return res;}
}

腐烂的橘子

题目链接:
994.腐烂的橘子
代码:

class Solution {int[][] move = {{0,1},{0,-1},{1,0},{-1,0}};public int orangesRotting(int[][] grid) {int row = grid.length, col = grid[0].length;Queue<int[]> queue = new LinkedList<>();Map<int[], Integer> depth = new HashMap<>();for (int r = 0; r < row; r ++) {for (int c = 0; c < col; c ++) {if (grid[r][c] == 2) {int[] code = new int[]{r,c};queue.offer(code);depth.put(code, 0);}}}int ans = 0;while (!queue.isEmpty()) {int[] curr = queue.poll();int m = curr[0];int n = curr[1];for (int k = 0; k < 4; k ++) {int next_m = m + move[k][0];int next_n = n + move[k][1];if (0 <= next_m && next_m < row && 0 <= next_n && next_n < col && grid[next_m][next_n] == 1) {grid[next_m][next_n] = 2;int[] next_code = new int[]{next_m,next_n};queue.offer(next_code);depth.put(next_code, depth.get(curr) + 1);ans = depth.get(next_code);}}}for (int r = 0; r < row; r ++) {for (int c = 0; c < col; c ++) {if (grid[r][c] == 1) {return -1;}}}return ans;}
}

课程表

题目链接:
207.课程表
代码:

class Solution {List<List<Integer>> edges;boolean valid = true;int[] visited;public void dfs(int i){visited[i] = 1;for (int edge:edges.get(i)){if (visited[edge] == 0){dfs(edge);if (! valid) return;}else if (visited[edge] == 1){valid = false;return;}}visited[i] = 2;}public boolean canFinish(int numCourses, int[][] prerequisites) {edges = new ArrayList<>();for (int i = 0; i < numCourses; i ++){edges.add(new ArrayList<>());}for (int[] item : prerequisites){edges.get(item[1]).add(item[0]);}visited = new int[numCourses];for (int i = 0; i < numCourses; i ++){if (visited[i] == 0){dfs(i);}}return valid;}
}

实现 Trie (前缀树)

题目链接:
208.实现 Trie (前缀树)
代码:

class Trie {private Trie[] children;private boolean isEnd;public Trie() {children = new Trie[26];isEnd = false;}private Trie searchPrefix(String prefix){Trie node = this;for (int i = 0; i < prefix.length(); i ++){char c = prefix.charAt(i);int index = c - 'a';if (node.children[index] == null) return null;node = node.children[index];}return node;}public void insert(String word) {Trie node = this;for (int i = 0; i < word.length(); i ++){char c = word.charAt(i);int index = c - 'a';if (node.children[index] == null){node.children[index] = new Trie();}node = node.children[index];}node.isEnd = true;}public boolean search(String word) {Trie node = searchPrefix(word);return node != null && node.isEnd;}public boolean startsWith(String prefix) {return searchPrefix(prefix) != null;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Django+Vue3前后端分离学习(一)(项目开始时settings.py里的设置)
  • SQL Server分页查询
  • Java获取小程序码示例(三种小程序码)
  • 【动态规划】【完全背包】力扣322. 零钱兑换
  • Java数据结构(八)——插入排序、希尔排序
  • 【超简单】1分钟解决ppt全文字体一键设置
  • es数组包含查询
  • 10.2 TCP IP模型、IP协议、IPv4、子网掩码
  • CAS与原子操作
  • 自动化部署代码【gitlab jenkins 华为云】
  • 【2024高教社杯国赛C题】数学建模国赛建模过程+完整代码论文全解全析
  • 2409wtl,wtl与ddx
  • vscode从本地安装插件
  • 数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall
  • Win10磁盘出现小锁和感叹号的解决办法
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [deviceone开发]-do_Webview的基本示例
  • 2018一半小结一波
  • css系列之关于字体的事
  • JavaScript设计模式系列一:工厂模式
  • JavaScript中的对象个人分享
  • Java应用性能调优
  • Promise面试题,控制异步流程
  • React 快速上手 - 07 前端路由 react-router
  • React-生命周期杂记
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Zsh 开发指南(第十四篇 文件读写)
  • 从零开始的无人驾驶 1
  • 动态规划入门(以爬楼梯为例)
  • 计算机在识别图像时“看到”了什么?
  • 使用 Docker 部署 Spring Boot项目
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用Python写一份独特的元宵节祝福
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 达梦数据库知识点
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (55)MOS管专题--->(10)MOS管的封装
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)球球大作战
  • (多级缓存)缓存同步
  • (二)测试工具
  • (论文阅读30/100)Convolutional Pose Machines
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)ABI是什么
  • **PHP二维数组遍历时同时赋值
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET是什么
  • .NET微信公众号开发-2.0创建自定义菜单
  • /boot 内存空间不够