• [leedcode 207] Course Schedule


    There are a total of n courses you have to take, labeled from 0 to n - 1.

    Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

    Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

    For example:

    2, [[1,0]]

    There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.

    2, [[1,0],[0,1]]

    There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.

    public class Solution {
        public boolean canFinish(int numCourses, int[][] prerequisites) {
            //本题是求拓扑图,验证图是否有环,从叶子节点开始求(出度为0的点),如果所有点都能遍历到,则满足条件
            //需要辅助数组,数组的下标代表课程编号,数组的值代表出度
            //queue保存的是出度为0的点,每次向里面添加需要计算个数count,最后结果需要判断count是否等于课程数numCourses
            int []flag=new int[numCourses];
            for(int i=0;i<prerequisites.length;i++){
               
                flag[prerequisites[i][1]]++;
            }
            LinkedList<Integer> queue=new LinkedList<Integer>();
            int count=0;
            for(int i=0;i<numCourses;i++){
                if(flag[i]==0){//出度为0
                    queue.add(i);
                    count++;
                }
            }
            while(!queue.isEmpty()){
                int k=queue.remove();
                for(int i=0;i<prerequisites.length;i++){
                    if(k==prerequisites[i][0]){
                        int l=prerequisites[i][1];
                        flag[l]--;
                        if(flag[l]==0){
                            count++;
                            queue.add(l);
                        }
                    }
                        
                }
                
                
            }
            return count==numCourses;
            
        }
    }
  • 相关阅读:
    Redis安装部署
    传输方式Topic和Queue的对比
    Hudson配置及使用
    linux 绿色版 bes 6.6服务安装
    LINUX磁盘管理
    并发用户数与 TPS 之间的关系
    性能测试场景
    计算并发用户数的五种方法
    让selenium自动化脚本运行的更快的技巧
    Jmeter学习
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4703237.html
Copyright © 2020-2023  润新知