210. Course Schedule II
来源:互联网 发布:阿里云app备案 编辑:程序博客网 时间:2024/05/01 03:44
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.
For example:
2, [[1,0]]
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]
4, [[1,0],[2,0],[3,1],[3,2]]
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].
public class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { int[][] matrix = new int[numCourses][numCourses]; int[] indegree = new int[numCourses]; int[] res = new int[numCourses]; int index = 0; int count = 0; for (int i = 0; i < prerequisites.length; i++) { int ready = prerequisites[i][0]; int pre = prerequisites[i][1]; if (matrix[pre][ready] == 0) indegree[ready]++; matrix[pre][ready] = 1; } LinkedList<Integer> queue = new LinkedList<Integer>(); for (int i = 0; i < numCourses; i++) { if (indegree[i] == 0) queue.offer(i); } while (!queue.isEmpty()) { int course = queue.poll(); count++; res[index++] = course; for (int i = 0; i < numCourses; i++) { if (matrix[course][i] != 0) { if (--indegree[i] == 0) queue.offer(i); } } } if (count == numCourses) return res; return new int[0]; }}
class Solution {public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { vector<vector <int> > matrix(numCourses, vector<int>(numCourses, 0)); vector<int> indegree(numCourses, 0); vector<int> res; int count = 0; for (int i = 0; i < prerequisites.size(); i++) { int ready = prerequisites[i].first; int pre = prerequisites[i].second; if (matrix[pre][ready] == 0) indegree[ready]++; matrix[pre][ready] = 1; } queue<int> coursequeue; for (int i = 0; i < numCourses; i++) { if (indegree[i] == 0) coursequeue.push(i); } while (!coursequeue.empty()) { int course = coursequeue.front(); coursequeue.pop(); res.push_back(course); count++; for (int i = 0; i < numCourses; i++) { if (matrix[course][i] != 0) { if (--indegree[i] == 0) coursequeue.push(i); } } } if (count == numCourses) return res; return vector<int>(); //return res; }};
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II**
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- Linux下C语言应用编程——GCC和GDB的使用
- ## 2017.02.18队内胡策(三) 斗地主 ##暴力模拟
- Android Studio versionCode 自增 打包命名
- 数据分析利器之hive优化十大原则
- 比XGBOOST更快--LightGBM介绍
- 210. Course Schedule II
- 论XGBOOST科学调参
- Android面试(1)
- HDU2083 简易版之最短路径
- 开源PLM软件Aras详解七 在Aras的Method中如何引用外部DLL
- 【Codeforces Round #398 (Div. 2)】Codeforces 767E Change-free
- Java日期相关随手笔记
- 深度学习论文笔记:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
- AtCoder Beginner Contest 055