lc 207. 课程表

    科技2023-10-02  98

    class Solution { // 保存每个点的入度列表和出度列表 // 从所有入度为0的点开始遍历,如果最终能够遍历到所有点,那么可以 private int cnt; private boolean[] vis; private void helper(int cur,int start){ if(start!=cur){ inDegree[cur]--; } vis[cur]=true; cnt++; for(int i:out.getOrDefault(cur,new ArrayList<>())){ inDegree[i]--; if(inDegree[i]==0&&!vis[i]){ helper(i,cur); } } } private HashMap<Integer,List<Integer>> out=new HashMap<>(); private int[] inDegree; public boolean canFinish(int numCourses, int[][] prerequisites) { // 还要维护每个点的入度,当一个指向该点的点被遍历,那么该点的入度-- inDegree=new int[numCourses]; vis=new boolean[numCourses]; for(int[] a:prerequisites){ // a[0]是终点,a[1]是起点 List<Integer> tOut=out.getOrDefault(a[1],new ArrayList<>()); tOut.add(a[0]); out.put(a[1],tOut); inDegree[a[0]]++; } for(int i=0;i<numCourses;i++){ if(inDegree[i]==0&&!vis[i]){ helper(i,i); } } return cnt==numCourses; } }

     

    Processed: 0.008, SQL: 8