# dfs自底向上
'''class solution:
def numofminutes(self, n: int, headid: int, manager, informtime) -> int:
visited = [false] * n
res = 0
for i in manager:
# 曾經經過的,說明計算過
if visited[i]:
continue
total = 0
while i != -1:
visited[i] = true
total += informtime[i]
i = manager[i]
if res < total:
res = total
return res
''''''
思路:dfs自頂向下
from collections import defaultdict
class solution:
def numofminutes(self, n: int, headid: int, manager, informtime) -> int:
a = defaultdict(list)
for i in range(len(manager)):
def find(n, headid, manager, informtime):
# 明到了最下屬
if informtime[headid] == 0:
return 0
# 如果不是最下屬,找孩子的最大時間
time = 0
# 防止遍歷找,就通過了
for i in a[headid]:
# 找下屬的最大值
t = find(n, i, manager, informtime) + informtime[headid]
if time < t:
time = t
return time
t = find(n, headid, manager, informtime)
return t
'''# bfs
from queue import queue
from collections import defaultdict
class solution:
def numofminutes(self, n: int, headid: int, manager, informtime) -> int:
q = queue()
tmp = defaultdict(list)
for i in range(len(manager)):
if manager[i] == -1:
continue
q.put((headid, 0))
result = 0
while not q.empty():
this_id, val = q.get()
for id_ in tmp[this_id]:
q.put((id_, val+informtime[this_id]))
result = max(result, val+informtime[this_id])
return result
s = solution()
n = 6
headid = 2
manager = [2,2,-1,2,2,2]
informtime = [0,0,1,0,0,0]
s.numofminutes(n, headid, manager, informtime)
演算法練習 通知所有員工所需的時間
公司裡有 n 名員工,每個員工的 id 都是獨一無二的,編號從 0 到 n 1。公司的總負責人通過 headid 進行標識。在 manager 陣列中,每個員工都有乙個直屬負責人,其中 manager i 是第 i 名員工的直屬負責人。對於總負責人,manager headid 1。題目保證從屬關係...
力扣解題思路 1376 通知所有員工所需的時間
思路 方法1 dfs dfs是最容易想到的,這是遍歷樹結構常用的一種遞迴演算法,用hashmap來儲存這個有向圖結構 也類似於多叉樹 從head節點開始遞迴遍歷他的子節點,相當於計算每一條從head出發到各個葉子節點的time取最大值即可。class solution map map newhash...
Android 8 1 通知的變化
android 7.0 通知的寫法如下 notificationmanager manager notificationmanager getsystemservice notification service notification notification new notificationco...