hot100 | 九、图论

金歌  金牌会员 | 2024-7-16 12:41:54 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 582|帖子 582|积分 1746

1-leetcode200. 岛屿数目

注意:×

  • 蛮奇妙的做法,直接在读取到1的时候给res的值+1,然后深度优先搜索把全部相邻的陆地全部改为海洋
  • 注意dfs里面的范围判定,[0, **length-1]**
  • length-1
  • length-1
  • length-1
  1.     public int numIslands(char[][] grid) {
  2.         int res = 0;
  3.         int n = grid.length;;
  4.         int m = grid[0].length;
  5.         for (int i = 0; i < n; i++) {
  6.             for (int j = 0; j < m; j++) {
  7.                 if (grid[i][j] == '1'){
  8.                     res++;
  9.                     dfs(grid, i, j);
  10.                 }
  11.             }
  12.         }
  13.         return res;
  14.     }
  15.     private void dfs(char[][] grid, int i, int j) {
  16.         if (i<0 || i>=grid.length || j<0 || j>=grid[0].length){
  17.             return;
  18.         }
  19.         if (grid[i][j] == '0'){
  20.             return;
  21.         }
  22.         grid[i][j] = '0';
  23.         dfs(grid, i+1, j);
  24.         dfs(grid, i, j+1);
  25.         dfs(grid, i-1, j);
  26.         dfs(grid, i, j-1);
  27.     }
复制代码
leetcode994. 腐烂的橘子

注意:×

  • 没写,看着考的太少,懒得写了
  1. [/code] [size=5]3-leetcode207. 课程表[/size]
  2. 注意:××
  3. [list=1]
  4. [*]花了许多时间,注意的地方太多了
  5. [*]创建List<Integer>[] graph的时候,Labuladong说写代码的时候大部分都是这种连接表的格式,先创建一个LinkedList类型的数组,然后一定要注意,是graph[i] = new LinkedList<>();
  6. [*]第二个注意的地方是有hasVisited和onPath两种记录,onPath的记录我能明确,hasVisited的记录还需要思索一下,主要的目的就是办理重复搜索
  7. [/list] [code]
  8.     boolean hasCycle = false;
  9.     boolean[] hasVisited;
  10.     boolean[] onPath;
  11.     public boolean canFinish(int numCourses, int[][] prerequisites) {
  12.         List<Integer>[] graph = buildGraph(numCourses, prerequisites);
  13.         hasVisited = new boolean[numCourses];
  14.         onPath = new boolean[numCourses];
  15.         for (int i = 0; i < numCourses; i++) {
  16.             traverse(graph, i);
  17.         }
  18.         return !hasCycle;
  19.     }
  20.     private void traverse(List<Integer>[] graph, int i) {
  21.         if (onPath[i]){
  22.             hasCycle = true;
  23.         }
  24.         if (hasCycle || hasVisited[i]){
  25.             return;
  26.         }
  27.         
  28.         hasVisited[i] = true;
  29.         
  30.         onPath[i] = true;
  31.         for (Integer integer : graph[i]) {
  32.             traverse(graph, integer);
  33.         }
  34.         
  35.         onPath[i] = false;
  36.     }
  37.     private List<Integer>[] buildGraph(int numCourses, int[][] prerequisites) {
  38.         List<Integer>[] graph = new LinkedList[numCourses];
  39.         for (int i = 0; i < graph.length; i++) {
  40.             graph[i] = new LinkedList<>();
  41.         }
  42.         for (int[] prerequisite : prerequisites) {
  43.             int from = prerequisite[1];
  44.             int to = prerequisite[0];
  45.             graph[from].add(to);
  46.         }
  47.         return graph;
  48.     }
复制代码
4-leetcode208. 实现 Trie (前缀树)

注意:×

  • 看了题解再写,感觉照旧有点压力
  • 注意isEnd的调用
  1.     class Trie {
  2.         class TrieNode{
  3.             boolean isEnd;
  4.             TrieNode[] nodes;
  5.             public TrieNode(){
  6.                 isEnd = false;
  7.                 nodes = new TrieNode[26];
  8.             }
  9.         }
  10.         private TrieNode root;
  11.         public Trie() {
  12.             root = new TrieNode();
  13.         }
  14.         public void insert(String word) {
  15.             TrieNode node = root;
  16.             for (char c : word.toCharArray()) {
  17.                 if (node.nodes[c-'a'] == null){
  18.                     node.nodes[c-'a'] = new TrieNode();
  19.                 }
  20.                 node = node.nodes[c-'a'];
  21.             }
  22.             node.isEnd = true;
  23.         }
  24.         public boolean search(String word) {
  25.             TrieNode node = root;
  26.             for (char c : word.toCharArray()) {
  27.                 if (node.nodes[c-'a'] == null){
  28.                     return false;
  29.                 }
  30.                 node = node.nodes[c-'a'];
  31.             }
  32.             return node.isEnd;
  33.         }
  34.         public boolean startsWith(String prefix) {
  35.             TrieNode node = root;
  36.             for (char c : prefix.toCharArray()) {
  37.                 if (node.nodes[c-'a'] == null){
  38.                     return false;
  39.                 }
  40.                 node = node.nodes[c-'a'];
  41.             }
  42.             return true;
  43.         }
  44.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表