問題描述
給定乙個任務列表和冷卻時間。在同一時刻可以同時處理多件任務,但是不能同時處理同一類任務。每一類任務處理完成後需要一定的冷卻時間後才能繼續處理同類的任務。演算法輸出按順序完成列表中給定任務所需的最短總時間。
測試樣例
# input:[1
,1,2
,1,3
,3,1
]# output:
12# 執行順序為:
# 1 _ _ 1 2 _ 1 3 _ _ 3 1
# _ 表示冷卻時間,所以給定任務需要 12 個單位時間完成。
參考**
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ---------------------
# o(n) time|o(k) space
# n為待處理的任務總數,k為不重複的任務總數。
# ---------------------
deftaskstime
(tasks, cooldown)
: currenttime =
0 lastposition =
# 使用字典來儲存已經執行過的任務
# 字典的 key 是任務名稱,value 是任務最後一次執行的時間
# 當接下來要執行的任務已經存在與字典中時,判斷該任務是否已經超過冷卻時間
for task in tasks:
if task in lastposition:
# 如果沒有超過冷卻時間,就更新當前時間為該任務最近執行時間+冷卻時間+1
# 即 將時間更新到冷卻結束可以繼續執行的時間
# 如果已經超過冷卻時間,那麼直接執行當前任務,並在字典中更新任務最後執行的時間
if currenttime - lastposition[task]
<= cooldown:
currenttime = lastposition[task]
+ cooldown +
1 lastposition[task]
= currenttime
currenttime +=
1return currenttime
# test program
tasks =[1
,1,2
,1,3
,3,1
]cooldown =
2print
(taskstime(tasks, cooldown)
)# 12
FreeRTOS的多工處理
1.freertos 多任務排程支援 時間片段,搶占式 和 和做式 任務侁先級可以在排程器啟動後呼叫 vtaskpriorityset api 函式進行修改 任意數量的任務可以共享同乙個優先順序 以保證最大設計彈性。當然,如果需要的話,你也可以為每個任務指定唯一的優先順序 就如同某些排程演算法的要求...
多工時的引數傳遞處理
背景 在開發板上判斷旋鈕左旋和右旋從而控制乙個數的增加和減小 task a 同時在lcd上顯示這個數 task b 問題 假設左旋一下,則在lcd上顯示左旋了很多下,用串列埠顯示確實多次操作了。思考 認真思考後發現問題出在任務的同步上,當a從開始到結束,有可能b已經執行很多次了,這就導致了多次判斷出...
通過執行緒池處理多工
每隔1000ms去查詢一次待辦任務 timer.schedule new timertask for final invoiceonlinerequestinfodo requestinfodo invoiceonlinerequestinfodolist try catch exception e...