import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.Queue; public class P0207CourseSchedule { public boolean canFinish(int numCourse, int[][]prerequisites){ int[]indegree = new int[numCourse];//记录每节课的入度 //key: course课程名称,再给出的prerequisite里就是先修的课程,index是1 //value: list:出度,修完KEY可以修的课程, index是0 //因为map里是构建有方向的图 HashMap>graph = new HashMap<>(); /* for(int i=0;i()); } graph.get(curarr[1]).add(curarr[0]); } */ for(int i = 0;i(Arrays.asList(innerList[0]))); } } Queuequeue = new LinkedList<>(); for(int i = 0;itoTake = graph.get(popE); if(toTake!=null){//因为有些节点是0入度,没有list for(int i = 0;i 1 (4)->(3)-> 2 (3)-> 4 (5)-> 3 (5)-> 时间复杂度: O(n+m)其中 n 为课程数,m 为先修课程的要求数。这就是对图进行广度优先搜索的时间复杂度。 空间复杂度: O(n+m)。题目中是以列表形式给出的先修课程关系,为了对图进行广度优先搜索,我们需要存储成邻接表的形式,空间复杂度为 O(n+m)。在广度优先搜索的过程中,我们需要最多 O(n)的队列空间(迭代)进行广度优先搜索。因此总空间复杂度为 O(n+m)。 */