• leetcode207 课程表(Medium)


    题目来源:leetcode207 课程表

    题目描述:

    你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。

    在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]

    给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?

    示例 1:

    输入: 2, [[1,0]]
    输出: true
    解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。

    示例 2:

    输入: 2, [[1,0],[0,1]]
    输出: false
    解释: 总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。

    提示:

    输入的先决条件是由 边缘列表 表示的图形,而不是 邻接矩阵 。详情请参见图的表示法。
    你可以假定输入的先决条件中没有重复的边。
    1 <= numCourses <= 10^5

    解题思路:

    class Solution {
    public:
        bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
           vector<vector<int>> graph(numCourses,vector<int>());//邻接表,记录一个结点的后继
           vector<int> in(numCourses,0);//入度
           for(int i=0;i<prerequisites.size();i++){
               graph[prerequisites[i][1]].push_back(prerequisites[i][0]);
               ++in[prerequisites[i][0]];
           }
           queue<int> q;
           int i=0,num=0;
           //入度为0的结点入队
           for(i=0;i<numCourses;i++){
               if(in[i]==0){
                   q.push(i);
                   num++;
               } 
           }
           while(!q.empty()){
               int t=q.front();
               q.pop();
               //入度为0的所有后继结点的入度-1
               for(i=0;i<graph[t].size();i++){
                   in[graph[t][i]]--;
                   //如果新得到入度为0的,也加入队列
                   if(in[graph[t][i]]==0){
                       q.push(graph[t][i]);
                       num++;//记录入度为0的个数
                   } 
               }
           }
           //最后所有的结点的入度都为0,如果个数不满足,则返回false,否则返回true
           if(num==numCourses) return true;
           else  return false;
        }
    };
    
  • 相关阅读:
    python if __name__ == '__main__' 作用
    Python pandas.DataFrame调整列顺序及修改index名
    Abp + gRpc 如何实现用户会话状态传递
    ASP .NET CORE 根据环境变量支持多个 appsettings.json
    [Abp 源码分析]九、事件总线
    [Abp 源码分析]八、缓存管理
    [Abp 源码分析]七、仓储与 Entity Framework Core
    基于阿里云 DNS API 实现的 DDNS 工具
    CentOS 7.4 安装 K8S v1.11.0 集群所遇到的问题
    [Abp 源码分析]六、工作单元的实现
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13356855.html
Copyright © 2020-2023  润新知