Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e94a5fb

Browse files
author
hj.tian
committed
feat: add LeetCode75 day26
feat: add LeetCode75 day26
1 parent 5c65370 commit e94a5fb

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

‎leetcode75/day26_210.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from collections import defaultdict
2+
from typing import List
3+
4+
5+
class Solution:
6+
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
7+
digraph = defaultdict(list)
8+
in_degree = [0 for _ in range(numCourses)]
9+
# 构建有向图
10+
for dependcy in prerequisites:
11+
# 0: [1, 2]
12+
digraph[dependcy[1]].append(dependcy[0])
13+
in_degree[dependcy[0]] += 1
14+
# 广度优先搜索
15+
result = []
16+
queue = [index for index in range(numCourses) if in_degree[index] == 0]
17+
while queue:
18+
size = len(queue)
19+
for start_index in range(size):
20+
start_node = queue[start_index]
21+
result.append(start_node)
22+
for end_node in digraph[start_node]:
23+
in_degree[end_node] -= 1
24+
if in_degree[end_node] == 0:
25+
queue.append(end_node)
26+
queue = queue[size:]
27+
# 判断是否可习完
28+
if len(result) == numCourses:
29+
return result
30+
return []
31+
32+
33+
if __name__ == "__main__":
34+
ans = Solution().findOrder(numCourses=2, prerequisites=[[1, 0]])
35+
assert sorted(ans) == sorted([0, 1])
36+
37+
ans = Solution().findOrder(numCourses=4, prerequisites=[[1, 0], [2, 0], [3, 1], [3, 2]])
38+
assert sorted(ans) == sorted([0, 2, 1, 3])
39+
40+
ans = Solution().findOrder(numCourses=1, prerequisites=[])
41+
assert sorted(ans) == sorted([0])
42+
43+
ans = Solution().findOrder(numCourses=2, prerequisites=[])
44+
assert sorted(ans) == sorted([0, 1])

‎leetcode75/day26_815.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from collections import defaultdict
2+
from typing import List
3+
4+
5+
class Solution:
6+
def numBusesToDestination(self, routes: List[List[int]], source: int, target: int) -> int:
7+
# 不需要乘坐公交车,步行省钱还锻炼身体
8+
if source == target:
9+
return 0
10+
# 创建有向图
11+
bus = len(routes)
12+
visit = [False for _ in routes]
13+
edges = defaultdict(list)
14+
starts, ends = [], []
15+
for i in range(bus):
16+
# 寻找起始点,终点所在的公交线路
17+
if source in routes[i]:
18+
starts.append(i)
19+
visit[i] = True
20+
if target in routes[i]:
21+
ends.append(i)
22+
# 构建有向图
23+
for j in range(i + 1, bus):
24+
if set(routes[i]) & set(routes[j]):
25+
edges[i].append(j)
26+
edges[j].append(i)
27+
steps = 1
28+
if any(target in routes[start] for start in starts):
29+
return steps
30+
# 广度优先搜索
31+
while starts:
32+
size = len(starts)
33+
for index in range(size):
34+
cur_route = starts[index]
35+
for next_route in edges[cur_route]:
36+
if next_route in ends:
37+
return steps + 1
38+
elif visit[next_route] is False:
39+
starts.append(next_route)
40+
visit[next_route] = True
41+
starts = starts[size:]
42+
steps += 1
43+
return -1
44+
45+
46+
if __name__ == "__main__":
47+
assert Solution().numBusesToDestination(routes=[[1, 2, 7], [3, 6, 7]], source=1, target=6) == 2
48+
assert (
49+
Solution().numBusesToDestination(
50+
routes=[[7, 12], [4, 5, 15], [6], [15, 19], [9, 12, 13]], source=15, target=12
51+
)
52+
== -1
53+
)
54+
assert Solution().numBusesToDestination(routes=[[2], [2, 8]], source=8, target=2) == 1
55+
assert Solution().numBusesToDestination(routes=[[2], [2, 8]], source=8, target=8) == 0

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /