207. Course Schedule(really less time complexity)

class Solution {

public static void addEdge(ArrayList<ArrayList<Integer>> adj,int u,int v,int indegree[]){
    adj.get(v).add(u);
    
    indegree[u]=indegree[u]+1;
    
    
}

public boolean canFinish(int n, int[][] prerequisites) {
    
    int indegree[]=new int[n];
    ArrayList<ArrayList<Integer>> adj=new ArrayList<ArrayList<Integer>>(n);
    
    for(int i=0;i<n;i++){
        
        adj.add(new ArrayList<Integer>());
        
    }
    
    
    
    for(int i=0;i<prerequisites.length;i++){
        
        addEdge(adj,prerequisites[i][0],prerequisites[i][1],indegree);
        
    }
    
    
    Queue<Integer> q=new LinkedList<Integer>();
    
    
    for(int i=0;i<n;i++){
        
        if(indegree[i]==0){
            q.add(i);
        }
    }
    
    while(!q.isEmpty()){
        
        int curr=q.poll();
        
        for(int j:adj.get(curr)){
            
            if(indegree[j]!=0)
                indegree[j]=indegree[j]-1;
            
            if(indegree[j]==0){
                q.add(j);
            }
            
        }
        
        
        
    }
    
    
    for(int i=0;i<n;i++){
        class Solution {

public static void addEdge(ArrayList<ArrayList<Integer>> adj,int u,int v,int indegree[]){
    adj.get(v).add(u);
    
    indegree[u]=indegree[u]+1;
    
    
}

public boolean canFinish(int n, int[][] prerequisites) {
    
    int indegree[]=new int[n];
    ArrayList<ArrayList<Integer>> adj=new ArrayList<ArrayList<Integer>>(n);
    
    for(int i=0;i<n;i++){
        
        adj.add(new ArrayList<Integer>());
        
    }
    
    
    
    for(int i=0;i<prerequisites.length;i++){
        
        addEdge(adj,prerequisites[i][0],prerequisites[i][1],indegree);
        
    }
    
    
    Queue<Integer> q=new LinkedList<Integer>();
    
    
    for(int i=0;i<n;i++){
        
        if(indegree[i]==0){
            q.add(i);
        }
    }
    
    while(!q.isEmpty()){
        
        int curr=q.poll();
        
        for(int j:adj.get(curr)){
            
            if(indegree[j]!=0)
                indegree[j]=indegree[j]-1;
            
            if(indegree[j]==0){
                q.add(j);
            }
            
        }
        
        
        
    }
    
    
    for(int i=0;i<n;i++){
        
        if(indegree[i]!=0){
            return false;
        }
        
    }
    return true;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}//main method

}//class
if(indegree[i]!=0){
return false;
}

    }
    return true;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}//main method

}//class

Comments (0)