LeetCode 1203 專案管理(Hard)

2021-10-14 19:54:34 字數 2750 閱讀 2329

題目鏈結

[python] 兩次拓撲排序100%

雙重拓撲排序——python

:### 0115 (兩次)拓撲排序(220 ms,38 mb)

defsortitems

(self, n:

int, m:

int, group: list[

int]

, pres: list[list[

int]])

-> list[

int]

:# 拓撲排序 —— 基於bfs排序(佇列)

deftopsort

(items, indegrees, neighbours)

: q = collections.deque(

) res =

for item in items:

# 將所有入度為0的節點入隊

if indegrees[item]==0

# 若佇列非空,則迴圈

while q:

# 隊首元素出隊,並新增到訪問序列中

tmp = q.popleft(

)# 訪問當前節點的所有鄰居節點

for n in neighbours[tmp]

:# 所有鄰居節點入隊減一

indegrees[n]-=1

# 若某一鄰居節點入度為0,則將其入隊

if indegrees[n]==0

return res

#-------------------- 準備工作 --------------------#

# 初始化需要的資料結構

indegrees_ing = collections.defaultdict(

int)

# 組內的入度

indegrees_betg = collections.defaultdict(

int)

# 組間的入度

neighbours_ing = collections.defaultdict(

list

)# 組內節點的依賴關係

neighbours_betg = collections.defaultdict(

list

)# 組間的依賴關係

groups = collections.defaultdict(

list

)# 記錄各小組中的元素

res =

# 解決方案

# 遍歷每乙個專案n

for item in

range

(n):

# 若無人接手當前專案,則給此專案重新分配乙個組

if group[item]==-

1:group[item]

= m

m +=

1# 每個小組中的元素統計在一起(同乙個列表)

groups[group[item]

]# 記錄全部的小組數,其中每個無人接手專案單獨在乙個組

group_num = m

# 判斷邊的兩節點是否在同一組,分別更新 組間的 和 組內的 依賴關係和入度數

for item in

range

(n):

for pre in pres[item]

:# 若兩節點同組,則更新 組內的 節點依賴關係

if group[item]

== group[pre]

: indegrees_ing[item]+=1

neighbours_ing[pre]

# 若兩節點不同組,則更新 組間的 節點依賴關係

else

: indegrees_betg[group[item]]+=

1 neighbours_betg[group[pre]])

#-------------------- 排序工作 --------------------#

# 先執行組間排序,res_betg為組間排序返回值

res_betg = topsort(

[group for group in

range

(group_num)

], indegrees_betg, neighbours_betg)

# 若組間排序返回值長度與組數不等說明連組間的依賴都無法實現,則直接返回

iflen

(res_betg)

!= group_num:

return

# 再執行組內排序,按照排好的組間排序依次對每個小組進行組內排序

for i in res_betg:

tmp_res = topsort(groups[i]

, indegrees_ing, neighbours_ing)

# 執行組內排序

res += tmp_res

return res if

len(res)

== n else

# 若最終長度與item個數不等說明連組內依賴無法實現,則返回

1203 專案管理

1203.專案管理 公司共有n個專案和m個小組,每個專案要不無人接手,要不就由m個小組之一負責。group i 表示第i個專案所屬的小組,如果這個專案目前無人接手,那麼group i 就等於 1。專案和小組都是從零開始編號的 小組可能存在沒有接手任何專案的情況。請你幫忙按要求安排這些專案的進度,並返...

1203 專案管理

公司共有 n 個專案和 m 個小組,每個專案要不無人接手,要不就由 m 個小組之一負責。group i 表示第 i 個專案所屬的小組,如果這個專案目前無人接手,那麼 group i 就等於 1。專案和小組都是從零開始編號的 小組可能存在沒有接手任何專案的情況。請你幫忙按要求安排這些專案的進度,並返回...

Disconf 2 專案使用disconf管理配置

這一篇我們講解disconf在專案中的基本使用 在專案中使用disconf來管理配置檔案,需要下面的一些步驟 redis.host 10.211.55.6 redis.port 6379 效果如下 2.建立自己的專案,我這裡使用的是springboot,引入disconf相關的依賴 在resourc...