Leetcode 210. 课程表 II(DAY 89) ---- 拓扑排序相关题目 打周赛去了
发布日期:2021-06-30 22:29:35 浏览次数:2 分类:技术文章

本文共 1596 字,大约阅读时间需要 5 分钟。

文章目录


原题题目

在这里插入图片描述


代码实现(首刷自解 复杂度较高还需优化)

class Solution {
public: bool dfs(int n,int ret,const vector
>& g,vector
& visit) {
if(visit[n]) {
if(n == ret) return true; else return false; } visit[n] = true; for(const auto& course:g[n]) if(dfs(course,ret,g,visit)) return true; return false; } bool havecircle(const vector
>& g,int numCourses) {
vector
visit; for(int i=0;i
(numCourses,false); if(dfs(i,i,g,visit)) return true; } return false; } vector
findOrder(int numCourses, vector
>& prerequisites) { vector
ret; vector
> g(numCourses); unordered_map
indegrees(numCourses); for(int i=0;i
next = indegrees; vector
v; while (true) { for(const auto& temp:next) { if(!temp.second) { ret.push_back(temp.first); v.push_back(temp.first); } } if(ret.size() == numCourses) break; next.clear(); while(!v.empty()) { auto pre = v.back(); indegrees.erase(pre); v.pop_back(); for(const auto& num:g[pre]) { auto temp = --indegrees[num]; next[num] = temp; } } } return ret; }};

代码实现(首刷自解优化 24ms)

class Solution {
public: vector
findOrder(int numCourses, vector
>& prerequisites) {
vector
ret; vector
> m(numCourses); unordered_map
indegrees; for(int i=0;i
s; vector
next; for(int i=0;i

转载地址:https://love6.blog.csdn.net/article/details/115819286 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Leetcode 第三周周赛总结(第 50 场双周赛)
下一篇:算法C++ 面试常考拓扑排序理解 面试复习用(第四章)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年05月01日 14时26分27秒