210. 课程表 II

断了今生、忘了曾经 提交于 2019-11-26 17:21:01

https://leetcode-cn.com/problems/course-schedule-ii/submissions/

拓扑排序

代码:

 public int[] findOrder(int numCourses, int[][] prerequisites) {
         //初始化图 键---值   键是表头节点   值是表边节点
        Map<Integer,List<Integer>> map=new HashMap<>(16);
        int[] degrees=new int[numCourses];
        int[] nums=new int[numCourses];
        for (int i=0;i<prerequisites.length;i++){
            int end=prerequisites[i][0];
            int start=prerequisites[i][1];
            List<Integer> list = map.get(start);
            if(list!=null){
                list.add(end);
            }else{
                map.put(start,new ArrayList<>());
                map.get(start).add(end);
            }
            degrees[end]++;
        }
        int j=0;
        Queue<Integer> queue=new LinkedList<>();
        for(int i=0;i<degrees.length;i++){
            if(degrees[i]==0){
                queue.offer(i);
                nums[j]=i;
                j++;
            }
        }
        int count=0;
        while(!queue.isEmpty()){
            Integer poll = queue.poll();
            count++;
            List<Integer> intList = map.get(poll);
            if(intList==null){
                continue;
            }
            for(int i=0;i<intList.size();i++){
                int idx=intList.get(i);
                degrees[idx]--;
                if(degrees[idx]==0){
                    queue.offer(idx);
                    nums[j]=idx;
                    j++;
                }
            }
        }
        if(count==numCourses){
            return nums;
        }
        return new int[]{};
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!