207. Course Schedule

问题传送门

问题分析

典型的有向图,判断是否存在回路问题。这里我使用的是Kaha算法。但是时间复杂度,空间负责度都过高,可以看出这里我存储时间负责和空间复杂度都为O(n^2),其问题在于如果是完全图他没问题,但是针对稀疏图则效率低下。
较优答案采用的是DFS的方式,通过从一个节点出发判断是否会再到达已经到达过的节点,来解决问题。后面的代码是我直接从以提交的答案上摘抄的。

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<vector<int>> graph(numCourses, vector<int>(numCourses + 1, -1));
        vector<int> finishCourses;
        int requCount = 0;
        for(auto &course : graph)
            course[numCourses] = 0;
        for(auto requires : prerequisites){
            graph[requires[0]][requires[1]] = 1;
            graph[requires[0]][numCourses]++;
            requCount++;
        }
        for(int i = 0; i < numCourses; i++)
            if(graph[i][numCourses] == 0){
                finishCourses.push_back(i);
            }
        while(!finishCourses.empty()){
            int finCour = finishCourses.back();
            finishCourses.pop_back();
            for(int i = 0;i < numCourses; i++){
                if(graph[i][finCour] != -1){
                    graph[i][numCourses]--;
                    requCount--;
                    graph[i][finCour] = -1;
                    if(graph[i][numCourses] == 0)
                        finishCourses.push_back(i);
                }
            }
            if(requCount == 0)  return true;
        }
        return requCount == 0;
    }
};
class Solution {
public:
   
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        unordered_map<int,vector<int>> table;
        vector<int> visited(numCourses,0);
        bool ret;
        int j;
        
        
        for(int i=0;i<prerequisites.size();i++) {
            table[prerequisites[i][1]].push_back(prerequisites[i][0]);
        }
        
        for(int i=0;i<numCourses;i++) {
            if(!visited[i]) {
                
                //visited[i] = -1;
                ret = dfs(table,visited,i);
                if(!ret)
                    return false;
            }
            //visited[i] = 1;
        }
        return true;
    }
    bool dfs(unordered_map<int,vector<int>>& table, vector<int>& visited, int source) {
            int child;
            bool ret;
            
            if(visited[source]==-1)
                return false;
            if(visited[source]==1)
                return true;
            
            visited[source] = -1;   // 对于现在正在遍历的节点标记为 -1
            for(int k=0;k<table[source].size();k++) {
                child = table[source][k];
               
                ret = dfs(table,visited,child);
                if(!ret)
                    return false;
                    
                
            }   
            visited[source] = 1;   // 已经完整遍历的节点标记为1,防止其他节点对其再进行DFS,节省时间
            return true;
        }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,ClassNotFoundException是一种异常类型,表示在运行时找不到指定的类。当使用Class.forName()方法或ClassLoader.loadClass()方法加载类时,如果找不到指定的类,就会抛出ClassNotFoundException异常。 对于你提到的ClassNotFoundException: CourseSchedule异常,它表示在运行时无法找到名为CourseSchedule的类。这可能是由于以下几个原因导致的: 1. 类名拼写错误:请确保你输入的类名正确无误。Java对类名是区分大小写的,所以请检查类名的大小写是否与实际类名一致。 2. 缺少依赖:如果CourseSchedule类依赖于其他类或库,而这些依赖项没有正确地被包含在项目中,就会导致ClassNotFoundException异常。请确保所有依赖项都已正确添加到项目中。 3. 类路径问题:如果CourseSchedule类所在的包或目录没有被正确地包含在类路径中,也会导致ClassNotFoundException异常。请检查类路径设置,确保包含了CourseSchedule类所在的路径。 解决这个问题的方法取决于你的具体情况。如果是第一种情况,你可以检查类名的拼写是否正确。如果是第二种情况,你需要确保所有依赖项都已正确添加到项目中。如果是第三种情况,你需要检查类路径设置是否正确。 如果你能提供更多的上下文信息,比如你是在什么情况下遇到这个异常,以及你的代码或项目结构,我可以给出更具体的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值