Skip to content

Commit 7d75135

Browse files
committed
- Course Schedule DaleStudy#261
1 parent 0a48b72 commit 7d75135

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

course-schedule/ayosecu.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from typing import List
2+
from collections import defaultdict, deque
3+
4+
class Solution:
5+
"""
6+
- Time Complexity: O(N + P), N = numCourses, P = len(prerequisites)
7+
- Space Complexity: O(N + P)
8+
"""
9+
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
10+
# Topology Sort
11+
# BFS based, ingress count, visited
12+
ingress_cnt = [0] * numCourses
13+
dic = defaultdict(list)
14+
15+
for dst, src in prerequisites:
16+
ingress_cnt[dst] += 1
17+
dic[src].append(dst)
18+
19+
dq = deque([])
20+
for dst in range(numCourses):
21+
if ingress_cnt[dst] == 0:
22+
dq.append(dst)
23+
24+
visited_count = 0
25+
while dq:
26+
src = dq.popleft()
27+
visited_count += 1
28+
29+
for dst in dic[src]:
30+
ingress_cnt[dst] -= 1
31+
if ingress_cnt[dst] == 0:
32+
dq.append(dst)
33+
34+
return visited_count == numCourses
35+
36+
tc = [
37+
(2, [[1,0]], True),
38+
(2, [[1,0],[0,1]], False)
39+
]
40+
41+
sol = Solution()
42+
for i, (n, p, e) in enumerate(tc, 1):
43+
r = sol.canFinish(n, p)
44+
print(f"TC {i} is Passed!" if r == e else f"TC {i} is Failed! - Expected: {e}, Result: {r}")

0 commit comments

Comments
 (0)