前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 0210 - Course Schedule II

LeetCode 0210 - Course Schedule II

作者头像
Reck Zhang
发布2021-08-11 12:08:52
2850
发布2021-08-11 12:08:52
举报
文章被收录于专栏:Reck Zhang

Course Schedule II

Desicription

There are a total of n courses you have to take, labeled from 0 to n-1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, return the ordering of courses you should take to finish all courses.

There may be multiple correct orders, you just need to return one of them. If it is impossible to finish all courses, return an empty array.

Example 1:

代码语言:javascript
复制
Input: 2, [[1,0]] 
Output: [0,1]
Explanation: There are a total of 2 courses to take. To take course 1 you should have finished   
             course 0. So the correct course order is [0,1] .

Example 2:

代码语言:javascript
复制
Input: 4, [[1,0],[2,0],[3,1],[3,2]]
Output: [0,1,2,3] or [0,2,1,3]
Explanation: There are a total of 4 courses to take. To take course 3 you should have finished both     
             courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0. 
             So one correct course order is [0,1,2,3]. Another correct ordering is [0,2,1,3] .

Note:

  • The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
  • You may assume that there are no duplicate edges in the input prerequisites.

Solution

代码语言:javascript
复制
class Solution {
public:
    vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
        vector<int> res;
        vector<unordered_set<int>> graph(numCourses);
        for(auto it : prerequisites) {
            graph[it.second].insert(it.first);
        }
        vector<int> degrees(numCourses, 0);
        for(auto it : graph) {
            for(auto index : it) {
                degrees[index]++;
            }
        }
        for(int i = 0; i < numCourses; i++) {
            int index = 0;
            for(; index < numCourses; index++) {
                if(degrees[index] == 0) {
                    break;
                }
            }
            if(index == numCourses) {
                return vector<int>(0);
            }
            res.push_back(index);
            degrees[index] = -1;
            for(auto it : graph[index]) {
                degrees[it]--;
            }
        }
        return res;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Course Schedule II
    • Desicription
      • Solution
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档