Skip to content

Commit 4b729ba

Browse files
committed
Time: 3 ms (99.99%), Space: 45 MB (77.46%) - LeetHub
1 parent a8f736a commit 4b729ba

File tree

1 file changed

+23
-27
lines changed

1 file changed

+23
-27
lines changed
Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,37 @@
11
class Solution {
2-
public boolean canFinish(int numCourses, int[][] prerequisites) {
2+
public boolean canFinish(int nC, int[][] prerequisites) {
33
ArrayList<ArrayList<Integer>> adj = new ArrayList<>();
4-
for(int i=0;i<numCourses;i++){
4+
for(int i=0;i<nC;i++){
55
adj.add(new ArrayList<>());
66
}
7-
8-
for(int i=0;i<prerequisites.length;i++){
9-
adj.get(prerequisites[i][0]).add(prerequisites[i][1]);
7+
for(int[] pre : prerequisites){
8+
adj.get(pre[1]).add(pre[0]);
109
}
11-
int[] indeg =new int[numCourses];
12-
for(int i=0;i<numCourses;i++){
13-
for(int ele:adj.get(i)){
14-
indeg[ele]++;
10+
int[] vis = new int[nC];
11+
for(int i=0;i<nC;i++){
12+
if(vis[i]==0){
13+
if (dfs(i, vis, adj)) {
14+
return false;
15+
}
1516
}
17+
1618
}
19+
return true;
1720

18-
19-
Queue<Integer> que = new LinkedList<>();
20-
for(int i=0;i<numCourses;i++){
21-
if(indeg[i]==0){
22-
que.offer(i);
23-
}
24-
}
25-
int cnt=0;
26-
while(!que.isEmpty()){
27-
int nodes = que.poll();
28-
cnt++;
29-
for(int node : adj.get(nodes)){
30-
indeg[node]--;
31-
if(indeg[node]==0){
32-
que.offer(node);
21+
}
22+
public boolean dfs(int node , int[] vis ,ArrayList<ArrayList<Integer>> adj){
23+
vis[node]=1;
24+
for(int adjNode : adj.get(node)){
25+
if(vis[adjNode]==0){
26+
if(dfs(adjNode,vis,adj)){
27+
return true;
3328
}
29+
}else if(vis[adjNode]==1){
30+
return true;
3431
}
3532
}
36-
if(cnt == numCourses){
37-
return true;
38-
}
33+
vis[node]=2;
3934
return false;
4035
}
36+
4137
}

0 commit comments

Comments
 (0)