课程表(拓补排序)
题目链接:https://leetcode.cn/problems/course-schedule-ii/description/
题意:
给定n门课程,规定只有学完某一个课程才能继续学下一门课程,让你输出学习顺序。如果成环,则返回空数组
思路:
拓补排序,入度删除法
需要提前准备一个indegree数组用来统计每个节点的入度大小,
用数组模拟双端队列,先把入度为0的点压入队列,再将这个点的影响消除(即把邻接表中该点的to删除,同时对应到indegree中),如果indegree因此出现为0的点则再次压入,直到压完
如果压入的个数刚好等于节点个数,说明不是环图。
class Solution { public: vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { vector<int>gra[2005]; vector<int>indegree(numCourses); for(int i=0;i<prerequisites.size();i++) { int from=prerequisites[i][1];int to=prerequisites[i][0]; indegree[to]++; gra[from].emplace_back(to); } vector<int> qu; int l=0,r=0; for(int i=0;i<numCourses;i++) { if(indegree[i]==0) { qu.emplace_back(i); r++; } } int cnt=0; while(l<r) { int cur=qu[l++]; cnt++; for(int next:gra[cur]) { if(--indegree[next]==0) { qu.emplace_back(next); r++; } } } vector<int>em; return cnt==numCourses? qu:em; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现