Mediumtopological-sortgraph
Решить задачу Course Schedule (LeetCode 207)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
LeetCode 207. Можно ли закончить все курсы = нет цикла в directed graph. Topological sort или cycle detection. O(V+E).
# BFS — Kahn's algorithm
from collections import deque
def canFinish(numCourses, prerequisites):
graph = [[] for _ in range(numCourses)]
indegree = [0] * numCourses
for course, prereq in prerequisites:
graph[prereq].append(course)
indegree[course] += 1
q = deque([i for i in range(numCourses) if indegree[i] == 0])
taken = 0
while q:
u = q.popleft()
taken += 1
for v in graph[u]:
indegree[v] -= 1
if indegree[v] == 0:
q.append(v)
return taken == numCourses # False = есть cycleАльтернатива — DFS с coloring: 0=white, 1=gray (in progress), 2=black (done). Если встречаем gray — cycle. Course Schedule II (210) — вернуть порядок (тот же алгоритм, собрать result).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.