210. 课程表Ⅱ
这题跟之前那题一样!!!
题目:


题解:
java
class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
//创建记录先修课程
int[] pres = new int[numCourses];
//创建映射表
Map<Integer, List<Integer>> map = new HashMap<>();
//进行初始化映射表
for(int i=0;i<numCourses;i++) {
map.put(i, new ArrayList<Integer>());
}
//根据prerequesties更新对应的pres,map
for(int i=0;i<prerequisites.length;i++) {
int course = prerequisites[i][0];
int preCourse = prerequisites[i][1];
map.get(preCourse).add(course);
pres[course]++;
}
List<Integer> res = new ArrayList<>();
int r = 0;
//进行bfs遍历
Queue<Integer> queue = new LinkedList<>();
for(int i=0;i<numCourses;i++) {
//如果没有先修课程
if(pres[i]==0) {
queue.offer(i);
}
}
while(queue.size()>0) {
int t = queue.poll();
res.add(t);
List<Integer> list = map.get(t);
for(int l:list) {
pres[l]--;
if(pres[l]==0) {
queue.offer(l);
}
}
}
if(res.size()!=numCourses) {
return new int[0];
}
return res.stream().mapToInt(i->i).toArray();
}
}