[LeetCode]210. Course Schedule II
2017-03-03 19:30
435 查看
https://leetcode.com/problems/course-schedule-ii/?tab=Description
课程有先修要求,要到一个正确的课程顺序
找到当前入度为零的课程加到结果list里面,同时把这个课程的后续课程入度减一,最后看结果list中是否包括所有课程
public class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] indegree = new int[numCourses];
int[][] matrix = new int[numCourses][numCourses];
for (int[] arr : prerequisites) {
int pre = arr[1];
int now = arr[0];
indegree[now]++;
matrix[pre][now] = 1;
}
Queue<Integer> queue = new LinkedList();
for (int i = 0; i < numCourses; i++) {
if (indegree[i] == 0) {
queue.add(i);
}
}
List<Integer> list = new LinkedList();
while (!queue.isEmpty()) {
int pre = queue.poll();
list.add(pre);
for (int i = 0; i < numCourses; i++) {
if (matrix[pre][i] != 0) {
indegree[i]--;
if (indegree[i] == 0) {
queue.add(i);
}
}
}
}
if (list.size() != numCourses) {
return new int[0];
} else {
int[] res = new int[numCourses];
for (int i = 0; i < list.size(); i++) {
res[i] = list.get(i);
}
return res;
}
}
}
课程有先修要求,要到一个正确的课程顺序
找到当前入度为零的课程加到结果list里面,同时把这个课程的后续课程入度减一,最后看结果list中是否包括所有课程
public class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] indegree = new int[numCourses];
int[][] matrix = new int[numCourses][numCourses];
for (int[] arr : prerequisites) {
int pre = arr[1];
int now = arr[0];
indegree[now]++;
matrix[pre][now] = 1;
}
Queue<Integer> queue = new LinkedList();
for (int i = 0; i < numCourses; i++) {
if (indegree[i] == 0) {
queue.add(i);
}
}
List<Integer> list = new LinkedList();
while (!queue.isEmpty()) {
int pre = queue.poll();
list.add(pre);
for (int i = 0; i < numCourses; i++) {
if (matrix[pre][i] != 0) {
indegree[i]--;
if (indegree[i] == 0) {
queue.add(i);
}
}
}
}
if (list.size() != numCourses) {
return new int[0];
} else {
int[] res = new int[numCourses];
for (int i = 0; i < list.size(); i++) {
res[i] = list.get(i);
}
return res;
}
}
}
相关文章推荐
- LeetCode 210. Course Schedule II(拓扑排序-求有向图中是否存在环)
- LeetCode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- [LeetCode]210. Course Schedule II
- LeetCode 210. Course Schedule II(课程安排)
- leetcode 210. Course Schedule II
- LeetCode *** 210. Course Schedule II
- 【LeetCode】210. Course Schedule II (Medium)
- LeetCode 210. Course Schedule II
- 第四周:[Leetcode]210. Course Schedule II
- leetcode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- [LeetCode] 210. Course Schedule II 课程安排II
- Leetcode 207. Course Schedule & 210. Course Schedule II
- Leetcode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- [leetcode]210. Course Schedule II
- 每周LeetCode算法题(二十)210. Course Schedule II
- Leetcode 210. Course Schedule II