hot100 | 九、图论

1-leetcode200. 岛屿数量

注意:×

  1. 蛮巧妙的做法,直接在读取到1的时候给res的值+1,然后深度优先搜索把所有相邻的陆地全部改为海洋
  2. 注意dfs里面的范围判断,[0, **length-1]**
  3. length-1
  4. length-1
  5. length-1
    public int numIslands(char[][] grid) {
        int res = 0;
        int n = grid.length;;
        int m = grid[0].length;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (grid[i][j] == '1'){
                    res++;
                    dfs(grid, i, j);
                }
            }
        }
        return res;
    }

    private void dfs(char[][] grid, int i, int j) {
        if (i<0 || i>=grid.length || j<0 || j>=grid[0].length){
            return;
        }
        if (grid[i][j] == '0'){
            return;
        }
        grid[i][j] = '0';
        dfs(grid, i+1, j);
        dfs(grid, i, j+1);
        dfs(grid, i-1, j);
        dfs(grid, i, j-1);
    }

leetcode994. 腐烂的橘子

注意:×

  1. 没写,看着考的太少,懒得写了

3-leetcode207. 课程表

注意:××

  1. 花了很多时间,注意的地方太多了
  2. 创建List<Integer>[] graph的时候,Labuladong说写代码的时候大部分都是这种邻接表的格式,先创建一个LinkedList类型的数组,然后一定要注意,是graph[i] = new LinkedList<>();
  3. 第二个注意的地方是有hasVisitedonPath两种记录,onPath的记录我能理解,hasVisited的记录还需要思考一下,主要的目的就是解决重复搜索

    boolean hasCycle = false;
    boolean[] hasVisited;
    boolean[] onPath;

    public boolean canFinish(int numCourses, int[][] prerequisites) {
        List<Integer>[] graph = buildGraph(numCourses, prerequisites);
        hasVisited = new boolean[numCourses];
        onPath = new boolean[numCourses];

        for (int i = 0; i < numCourses; i++) {
            traverse(graph, i);
        }

        return !hasCycle;
    }

    private void traverse(List<Integer>[] graph, int i) {
        if (onPath[i]){
            hasCycle = true;
        }
        if (hasCycle || hasVisited[i]){
            return;
        }
        
        hasVisited[i] = true;
        
        onPath[i] = true;

        for (Integer integer : graph[i]) {
            traverse(graph, integer);
        }
        
        onPath[i] = false;
    }

    private List<Integer>[] buildGraph(int numCourses, int[][] prerequisites) {
        List<Integer>[] graph = new LinkedList[numCourses];
        for (int i = 0; i < graph.length; i++) {
            graph[i] = new LinkedList<>();
        }
        for (int[] prerequisite : prerequisites) {
            int from = prerequisite[1];
            int to = prerequisite[0];
            graph[from].add(to);
        }
        return graph;
    }

4-leetcode208. 实现 Trie (前缀树)

注意:×

  1. 看了题解再写,感觉还是有点压力
  2. 注意isEnd的调用
    class Trie {
        class TrieNode{
            boolean isEnd;
            TrieNode[] nodes;
            public TrieNode(){
                isEnd = false;
                nodes = new TrieNode[26];
            }
        }

        private TrieNode root;

        public Trie() {
            root = new TrieNode();
        }

        public void insert(String word) {
            TrieNode node = root;
            for (char c : word.toCharArray()) {
                if (node.nodes[c-'a'] == null){
                    node.nodes[c-'a'] = new TrieNode();
                }
                node = node.nodes[c-'a'];
            }
            node.isEnd = true;
        }

        public boolean search(String word) {
            TrieNode node = root;
            for (char c : word.toCharArray()) {
                if (node.nodes[c-'a'] == null){
                    return false;
                }
                node = node.nodes[c-'a'];
            }
            return node.isEnd;
        }

        public boolean startsWith(String prefix) {
            TrieNode node = root;
            for (char c : prefix.toCharArray()) {
                if (node.nodes[c-'a'] == null){
                    return false;
                }
                node = node.nodes[c-'a'];
            }
            return true;
        }
    }

相关推荐

  1. hot100 |

    2024-07-15 10:44:02       27 阅读
  2. leetcode-hot100-

    2024-07-15 10:44:02       41 阅读
  3. hot100-/岛屿问题

    2024-07-15 10:44:02       38 阅读
  4. leetcode hot100_part28_

    2024-07-15 10:44:02       32 阅读
  5. leetcode刷题记录:hot100强化训练2:二叉树+

    2024-07-15 10:44:02       23 阅读
  6. TOP100

    2024-07-15 10:44:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 10:44:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 10:44:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 10:44:02       62 阅读
  4. Python语言-面向对象

    2024-07-15 10:44:02       72 阅读

热门阅读

  1. day2 上下文Context

    2024-07-15 10:44:02       24 阅读
  2. 重学PyTorch,粗略笔记(一)

    2024-07-15 10:44:02       24 阅读
  3. 序列标注任务 - CRF条件随机场

    2024-07-15 10:44:02       19 阅读
  4. Python 字典(Dict)详解与实战应用

    2024-07-15 10:44:02       23 阅读
  5. 翁恺-C语言程序设计-07-3. 数素数

    2024-07-15 10:44:02       25 阅读
  6. [C++]this指针

    2024-07-15 10:44:02       25 阅读
  7. [C++]位图+布隆过滤器

    2024-07-15 10:44:02       26 阅读