5354 通知所有員工所需的時間

2021-10-03 15:48:53 字數 1849 閱讀 7248

# 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...