力扣labuladong——一刷day78

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


图这种数据结构有一些比较特殊的算法,比如二分图判断,有环图无环图的判断,拓扑排序,以及最经典的最小生成树,单源最短路径问题,更难的就是类似网络流这样的问题

一、力扣210. 课程表 II(DFS)

class Solution {
   
    boolean[] onPath;
    boolean[] visited;
    boolean flag = false;
    List<Integer> res = new LinkedList<>();
    public int[] findOrder(int numCourses, int[][] prerequisites) {
   
        onPath = new boolean[numCourses];
        visited = new boolean[numCourses];
        List<Integer>[] graph = builderGraph(numCourses, prerequisites);
        for(int i = 0; i < numCourses; i ++){
   
            traverse(graph,i);
        }
        if(flag){
   
            return new int[]{
   };
        }
        Collections.reverse(res);
        return res.stream().mapToInt(Integer::intValue).toArray();
    }
    public void traverse(List<Integer>[] graph, int s){
   
        if(onPath[s]){
   
            flag = true;
            return;
        }
        if(visited[s] || flag){
   
            return;
        }
        onPath[s] = true;
        visited[s] = true;
        for(int a : graph[s]){
   
            traverse(graph, a);
        }
        res.add(s);
        onPath[s] = false;
    }
    public List<Integer>[] builderGraph(int numCourses, int[][] prerequisites){
   
        List<Integer>[] graph = new LinkedList[numCourses];
        for(int i = 0; i < numCourses; i ++){
   
            graph[i] = new LinkedList<>();
        }
        for(int[] arr: prerequisites){
   
            int to = arr[0];
            int from = arr[1];
            graph[from].add(to);
        }
        return graph;
    }
}

二、力扣力扣210. 课程表 II(BFS)

class Solution {
   
    int[] degree;
    public int[] findOrder(int numCourses, int[][] prerequisites) {
   
        degree = new int[numCourses];
        List<Integer>[] graph = builderGraph(numCourses, prerequisites);
        Deque<Integer> deq = new LinkedList<>();
        int[] res = new int[numCourses];
        int count = 0;
        for(int i = 0; i < numCourses; i ++){
   
            if(degree[i] == 0){
   
                deq.offerLast(i);
                res[count++] = i;
            }
        }
        while(!deq.isEmpty()){
   
            int cur = deq.pollFirst();
            for(int a : graph[cur]){
   
                degree[a] --;
                if(degree[a] == 0){
   
                    res[count++] = a;
                    deq.offerLast(a);
                }
            }
        }
        if(count != numCourses){
   
            return new int[]{
   };
        }
        return res;
    }
    public List<Integer>[] builderGraph(int numCourses, int[][] prerequisites){
   
        List<Integer>[] graph = new LinkedList[numCourses];
        for(int i = 0;i < numCourses; i ++){
   
            graph[i] = new LinkedList<>();
        }
        for(int[] arr : prerequisites){
   
            int from = arr[1];
            int to = arr[0];
            graph[from].add(to);
            degree[to] ++;
        }
        return graph;
    }
}

相关推荐

  1. labuladong——day78

    2023-12-24 11:52:02       37 阅读
  2. labuladong——day70

    2023-12-24 11:52:02       40 阅读
  3. labuladong——day74

    2023-12-24 11:52:02       36 阅读
  4. labuladong——day75

    2023-12-24 11:52:02       39 阅读
  5. labuladong——day76

    2023-12-24 11:52:02       52 阅读
  6. labuladong——day77

    2023-12-24 11:52:02       33 阅读
  7. labuladong——day79

    2023-12-24 11:52:02       36 阅读
  8. labuladong——day68

    2023-12-24 11:52:02       37 阅读
  9. labuladong——day67

    2023-12-24 11:52:02       33 阅读
  10. labuladong——day69

    2023-12-24 11:52:02       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-24 11:52:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-24 11:52:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-24 11:52:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-24 11:52:02       18 阅读

热门阅读

  1. python自动开发,基础2

    2023-12-24 11:52:02       31 阅读
  2. Vue 3 表单处理精讲:打造响应式注册表单的艺术

    2023-12-24 11:52:02       33 阅读
  3. ClickHouse(19)ClickHouse集成Hive表引擎详细解析

    2023-12-24 11:52:02       32 阅读
  4. pytorch常用的几个函数详解

    2023-12-24 11:52:02       39 阅读
  5. [网络安全] 远程登录

    2023-12-24 11:52:02       38 阅读
  6. Vite和Webpack的优缺点

    2023-12-24 11:52:02       43 阅读
  7. Nodejs+Express搭建HTTPS服务

    2023-12-24 11:52:02       37 阅读
  8. C#编程语言的从入门到深入学习大纲

    2023-12-24 11:52:02       38 阅读
  9. 36.MYSQL的外键(foreign key)

    2023-12-24 11:52:02       32 阅读
  10. How to upgrade/downgrade Rubygems:

    2023-12-24 11:52:02       32 阅读