Python程序:按正确顺序查找机场?
假设我们有一份航班列表,以[起点,终点]对的形式给出。列表是乱序的;我们必须找到所有按正确顺序访问的机场。如果有多个有效的行程,则先返回字典序最小的行程。
因此,如果输入类似于flights = [["Mumbai", "Kolkata"],["Delhi", "Mumbai"],["Kolkata", "Delhi"] ],则输出将为['Delhi', 'Mumbai', 'Kolkata', 'Delhi']
为了解决这个问题,我们将遵循以下步骤
ins := 一个空映射
outs := 一个空映射
adj_list := 一个空映射
定义一个函数dfs()。这将接受机场作为参数
当outs[airport]不为空时,执行以下操作:
nxt := adj_list[airport]的大小 - outs[airport]
outs[airport] := outs[airport] - 1
将机场插入ans的末尾
定义一个名为solve()的方法,这将接受航班作为参数
对于flights中的每个起点-终点对s, e,执行以下操作:
将e插入adj_list[s]的末尾
outs[s] := outs[s] + 1
ins[e] := ins[e] + 1
对于adj_list所有值的列表中的每个l,执行以下操作:
对列表l进行排序
start := null, end := null
对于adj_list所有键的列表中的每个机场,执行以下操作:
如果outs[airport] - ins[airport]等于1,则
如果start不为空,则
返回
start := airport
否则,如果outs[airport] - ins[airport]等于-1,则
如果end不为空,则
返回
end := airport
否则,如果outs[airport] - ins[airport]不等于0,则
返回
start := 如果start不为空则为start,否则为adj_list所有键的最小值
ans := 一个新的列表
dfs(start)
返回ans的反转
从主方法调用solve(flights)
示例
from collections import defaultdict class Solution: def solve(self, flights): ins = defaultdict(int) outs = defaultdict(int) adj_list = defaultdict(list) for s, e in flights: adj_list[s].append(e) outs[s] += 1 ins[e] += 1 for l in adj_list.values(): l.sort() start = None end = None for airport in adj_list.keys(): if outs[airport] - ins[airport] == 1: if start: return start = airport elif outs[airport] - ins[airport] == -1: if end: return end = airport elif outs[airport] - ins[airport] != 0: return start = start if start else min(adj_list.keys()) ans = [] def dfs(airport): while outs[airport]: nxt = len(adj_list[airport]) - outs[airport] outs[airport] -= 1 dfs(adj_list[airport][nxt]) ans.append(airport) dfs(start) return ans[::-1] ob = Solution() flights = [ ["Mumbai", "Kolkata"], ["Delhi", "Mumbai"], ["Kolkata", "Delhi"] ] print(ob.solve(flights))
输入
[["Mumbai", "Kolkata"], ["Delhi", "Mumbai"], ["Kolkata", "Delhi"] ]
输出
['Delhi', 'Mumbai', 'Kolkata', 'Delhi']