Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f179db8

Browse files
refactor 207
1 parent be434a9 commit f179db8

File tree

1 file changed

+41
-0
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+41
-0
lines changed

src/main/java/com/fishercoder/solutions/_207.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import java.util.HashSet;
44
import java.util.Iterator;
5+
import java.util.LinkedList;
6+
import java.util.Queue;
57
import java.util.Set;
68

79
public class _207 {
810

911
public static class Solution1 {
12+
/**Kahn's algorithm for topological sorting*/
1013
public boolean canFinish(int numCourses, int[][] prerequisites) {
1114
int[] indegree = new int[numCourses];
1215
for (int[] prereq : prerequisites) {
@@ -44,4 +47,42 @@ public boolean canFinish(int numCourses, int[][] prerequisites) {
4447
return true;
4548
}
4649
}
50+
51+
public static class Solution2 {
52+
/**
53+
* BFS
54+
*/
55+
public boolean canFinish(int numCourses, int[][] prerequisites) {
56+
int[] indegree = new int[numCourses];
57+
for (int[] pre : prerequisites) {
58+
indegree[pre[0]]++;
59+
}
60+
Queue<Integer> queue = new LinkedList();
61+
for (int i = 0; i < numCourses; i++) {
62+
if (indegree[i] == 0) {
63+
queue.offer(i);
64+
}
65+
}
66+
if (queue.isEmpty()) {
67+
return false;
68+
}
69+
while (!queue.isEmpty()) {
70+
int course = queue.poll();
71+
for (int[] pre : prerequisites) {
72+
if (pre[1] == course) {
73+
indegree[pre[0]]--;
74+
if (indegree[pre[0]] == 0) {
75+
queue.offer(pre[0]);
76+
}
77+
}
78+
}
79+
}
80+
for (int degree : indegree) {
81+
if (degree != 0) {
82+
return false;
83+
}
84+
}
85+
return true;
86+
}
87+
}
4788
}

0 commit comments

Comments
 (0)