LeetCode題解(0210):課程表II(Python)
題目:原題連結(中等)
標籤:圖、拓撲排序、廣度優先搜尋、深度優先搜尋
解法 | 時間複雜度 | 空間複雜度 | 執行用時 |
---|---|---|---|
Ans 1 (Python) | O ( N ) O(N) O(N) | O ( N ) O(N) O(N) | 84ms (12.88%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
def build_graph(edges):
graph_in = collections.defaultdict(set)
graph_out = collections.defaultdict(set)
for edge in edges:
graph_in[edge[1]].add(edge[0])
graph_out[edge[0]].add(edge[1])
return graph_out, graph_in
def topo(graph_in, graph_out):
count = {} # 節點入射邊統計
queue = [] # 當前入射邊為0的節點列表
# 統計所有節點的入射邊
for node in graph_in:
count[node] = len(graph_in[node])
for node in graph_out:
if node not in count:
count[node] = 0
queue.append(node)
# 拓撲排序
order = []
while queue:
node = queue.pop()
order.append(node)
for next in graph_out[node]:
count[next] -= 1
if count[next] == 0:
queue.append(next)
return order
class Solution:
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
# 生成有向圖中邊的鄰接列表結構
graph_in, graph_out = build_graph(prerequisites)
# 拓撲排序
order = topo(graph_in, graph_out)
order_set = set(order)
for node in graph_in:
if node not in order:
return []
for i in range(numCourses):
if i not in order_set:
order.append(i)
return order
相關文章
- LeetCode題解(0407):接雨水II(Python)LeetCodePython
- LeetCode 207. 課程表(Medium)LeetCode
- OCP課程56:管理II之SQL調優SQL
- LeetCode 272 Closest Binary Tree Traversal II 解題思路LeetCode
- [Leetcode] 253. Meeting Rooms II 解題報告LeetCodeOOM
- OCP課程58:管理II之自動任務
- OCP課程42:管理II之核心概念和工具
- OCP課程54:管理II之管理記憶體記憶體
- OCP課程45:管理II之備份設定
- leetcode題解(查詢表問題)LeetCode
- DH-SQL(學生資訊表-課程表-選課表)SQL
- OCP課程61:管理II之複製資料庫資料庫
- OCP課程50:管理II之診斷資料庫資料庫
- 【LeetCode】253. Meeting Rooms II 解題報告(C++)LeetCodeOOMC++
- python課程筆記Python筆記
- Python-TCP-尹成-專題視訊課程PythonTCP
- 必看,經典sql面試題2(學生表_課程表_成績表_教師表)SQL面試題
- 必看,經典sql面試題1(學生表_課程表_成績表_教師表)SQL面試題
- Python開發系列課程彙總 - 課程大綱Python
- 【leetcode】每日精選題詳解之59. 螺旋矩陣 IILeetCode矩陣
- 【LeetCode】 Best Time to Buy and Sell Stock I II III IV 解題報告LeetCode
- OCP課程48:管理II之使用RMAN執行恢復
- OCP課程51:管理II之使用閃回技術1
- OCP課程52:管理II之使用閃回技術2
- OCP課程53:管理II之使用閃回資料庫資料庫
- 力扣刷題筆記:207. 課程表力扣筆記
- Python-遞迴-尹成-專題視訊課程Python遞迴
- Python-多程式-尹成-專題視訊課程Python
- OCP課程47:管理II之還原和恢復任務
- python是什麼課程Python
- COURSERA上的Python課程Python
- 如何學習python課程Python
- Python-協程office自動化-尹成-專題視訊課程Python
- LeetCode 59. 螺旋矩陣 II(python、c++)LeetCode矩陣PythonC++
- [LeetCode] Jump Game IILeetCodeGAM
- Leetcode jump Game IILeetCodeGAM
- Leetcode Spiral Matrix IILeetCode
- Leetcode Path Sum IILeetCode