LeetCode 621 任務排程器

2021-09-11 17:45:55 字數 1615 閱讀 6707

給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a - z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。

然而,兩個相同種類的任務之間必須有長度為n的冷卻時間,因此至少有連續 n 個單位時間內 cpu 在執行不同的任務,或者在待命狀態。

你需要計算完成所有任務所需要的最短時間

示例 1:

輸入:tasks = ["a","a","a","b","b","b"], n = 2輸出:8執行順序:a -> b -> (待命) -> a -> b -> (待命) -> a -> b.
注:任務的總個數為 [1, 10000]。

n 的取值範圍為 [0, 100]。

解題思路:統計每種任務的數量,計max_count數量最大值,計num_max_count為任務數量等於max_count的任務種類數,那麼最短時間=max((max_count-1)*(n+1)+num_max_count,len(tasks))

原理解釋如下:

假設a為tasks中數量最大的任務種類,n為2,那麼執行順序為axxaxxaxx...a,其中x代表其他任務種類或者待命狀態間隔插空,即可在最短時間內完成所有任務的排程。

假設a,b同為tasks中數量最大的任務種類,n為2,那麼執行順序為abxxabxxabxx...ab,其中x代表其他任務種類或者待命狀態間隔插空,即可在最短時間內完成所有任務的排程。

為什麼要對len(tasks)取較大值呢?因為當n較小時,比如0,num_max_count較大時,比如2,n+1可能就不能表示每段任務序列的長度。例子:[a,aa,b,b,b],n = 0,排程順序為ababab,按照公式計算(3-1)*(0+1)+2 = 4,其中(0+1)不能表示任務子串行的長度。

python3**如下:

Leetcode 621任務排程

首先統計同型別的任務數,然後從大到小排序 因為數量多的任務才會因為重複,需要間隔期 排序不影響結果,無論是三個a和兩個b,還是兩個a和三個b結果是一樣的。想法是有多個桶 桶的個數取決於數量最多的任務數 桶的容量至少是n 1,桶內元素不重複,如果元素不能填滿,就需要填入冷卻時間。如果多餘元素數量大於等...

leetcode 621 任務排程器

給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為n的冷卻時...

LEETCODE 621任務排程器

採用用的比較多的統計詞頻的做法。先對char陣列中的字頻進行統計,然後排序。比如aaabbcc這種串且n 2,可以使a a a 然後把bc分別插進去。網上有很多討論一組空格可以直接放進去的部落格,次數就不說了。著重記錄一下以下情況 如 1 aaabbccddee,n 2 2 或者aabbcc,n 1...