Skip to content

Commit dc68802

Browse files
committed
update 207 java,
1 parent c041e94 commit dc68802

File tree

1 file changed

+71
-3
lines changed

1 file changed

+71
-3
lines changed

leetcode_java/src/main/java/LeetCodeJava/BFS/CourseSchedule.java

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,33 +68,100 @@ public class CourseSchedule {
6868
// return true;
6969
// }
7070

71+
// V0'
72+
// IDEA : BFS
73+
public boolean canFinish(int numCourses, int[][] prerequisites) {
74+
Map<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
75+
int[] indegree = new int[numCourses];
76+
Queue<Integer> queue = new LinkedList<Integer>();
77+
int count = numCourses;
78+
79+
/** NOTE !!! numCourses */
80+
for (int i = 0; i < numCourses; i++) {
81+
map.put(i, new ArrayList<Integer>());
82+
}
83+
84+
/** NOTE !!! prerequisites */
85+
for (int i = 0; i < prerequisites.length; i++) {
86+
map.get(prerequisites[i][0]).add(prerequisites[i][1]);
87+
88+
/** NOTE : below approaches has same effect */
89+
// V1
90+
//indegree[prerequisites[i][1]]++;
91+
// V2
92+
indegree[prerequisites[i][1]] += 1;
93+
}
94+
95+
/** NOTE !!! numCourses */
96+
for (int i = 0; i < numCourses; i++) {
97+
// only insert to queue if "indegree == 0" (course has NO prerequisite)
98+
if (indegree[i] == 0) {
99+
queue.offer(i); // insert to queue
100+
}
101+
}
102+
103+
while (!queue.isEmpty()) {
104+
int current = queue.poll(); // pop from queue
105+
for (int i : map.get(current)) {
106+
107+
/** NOTE : below approaches has same effect */
108+
// V1
109+
// if (--indegree[i] == 0) {
110+
// queue.offer(i);
111+
// }
112+
113+
// V2
114+
if (indegree[i] == 1) {
115+
queue.offer(i);
116+
} else {
117+
indegree[i] -= 1;
118+
}
119+
120+
}
121+
// when finish a course checking ( course visit and course prerequisite visit)
122+
count--;
123+
}
124+
return count == 0;
125+
}
126+
71127
// V1
72128
// IDEA : BFS
73129
// https://leetcode.com/problems/course-schedule/solutions/58775/my-java-bfs-solution/
74-
public boolean canFinish(int numCourses, int[][] prerequisites) {
130+
public boolean canFinish__(int numCourses, int[][] prerequisites) {
75131
Map<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
76132
int[] indegree = new int[numCourses];
77133
Queue<Integer> queue = new LinkedList<Integer>();
78134
int count = numCourses;
135+
136+
/** NOTE !!! numCourses */
79137
for (int i = 0; i < numCourses; i++) {
80138
map.put(i, new ArrayList<Integer>());
81139
}
140+
141+
/** NOTE !!! prerequisites */
82142
for (int i = 0; i < prerequisites.length; i++) {
83143
map.get(prerequisites[i][0]).add(prerequisites[i][1]);
144+
145+
/** NOTE : below approaches has same effect */
84146
// V1
85147
//indegree[prerequisites[i][1]]++;
86148
// V2
87149
indegree[prerequisites[i][1]] += 1;
88150
}
151+
152+
/** NOTE !!! numCourses */
89153
for (int i = 0; i < numCourses; i++) {
154+
// only insert to queue if "indegree == 0" (course has NO prerequisite)
90155
if (indegree[i] == 0) {
91-
queue.offer(i);
156+
queue.offer(i); // insert to queue
92157
}
93158
}
159+
94160
while (!queue.isEmpty()) {
95-
int current = queue.poll();
161+
int current = queue.poll(); // pop from queue
96162
for (int i : map.get(current)) {
97163

164+
/** NOTE : below approaches has same effect */
98165
// V1
99166
// if (--indegree[i] == 0) {
100167
// queue.offer(i);
@@ -108,6 +175,7 @@ public boolean canFinish(int numCourses, int[][] prerequisites) {
108175
}
109176

110177
}
178+
// when finish a course checking ( course visit and course prerequisite visit)
111179
count--;
112180
}
113181
return count == 0;

0 commit comments

Comments
 (0)