leetcode 课程表 中等

Posted Wh1t3zZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 课程表 中等相关的知识,希望对你有一定的参考价值。

 

 

 

拓扑。

存 prerequisties[1] 到 prerequisties[0] 的边,然后记录入度。

用队列来进行拓扑,边对应终点入度- 1,入度为 0 时,加入队列。

最后判断每个点是否入度为 0 即可。

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<vector<int>> edge(numCourses);   // edge[i] 存 边
        vector<int> in(numCourses, 0);     // 入度
        for(int i = 0; i < prerequisites.size(); ++ i) {
            edge[prerequisites[i][1]].emplace_back(prerequisites[i][0]);
            ++ in[prerequisites[i][0]];
        }
        queue<int> que;     //
        for(int i = 0; i < numCourses; ++ i) {
            if(in[i] == 0) {
                que.push(i);
            }
        }
        while(!que.empty()) {
            int f = que.front(); que.pop();
            for(int i = 0; i < edge[f].size(); ++ i) {
                -- in[edge[f][i]];
                if(in[edge[f][i]] == 0) {
                    que.push(edge[f][i]);
                }
            }
        }
        for(int i = 0; i < numCourses; ++ i) {
            if(in[i] != 0) return false;
        }
        return true;
    }
};

 

以上是关于leetcode 课程表 中等的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 最长递增子序列 中等

LeetCode - 24 - 两两交换链表中等的节点 - Java

Leetcode刷题Python LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色

leetcode 最短无序连续子数组 中等

LeetCode题解打家劫舍(中等难度)

LeetCode题解打家劫舍(中等难度)