您的位置:首页 > 其它

[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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: