leetcode 任務排程器

2021-09-27 11:55:18 字數 1147 閱讀 6201

給定乙個用字元陣列表示的 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]。

class solution }}

arrays.sort(count);

int max = count[length - 1]; //a的個數

int countsame = 0; //像a一樣的還有countsame個(例如b)

for (int i = length - 2; i >= 0; i--)

/*aaabbb,a最多為3,max=3,countsame=1

貪心策略: ab?ab?ab (優選放好個數的max的字母)

*/int result = 0; //記錄到b的長度

int rest = 0; //?的個數

if (countsame <= n)

/*aaabbbcccdddeee,n=2

選用貪心策略: abcdeabcdeabcde

而不是: abcabcabcde?de?de

*/else

//剩餘非優先的先放?再放在後排即可

int notpriority = length - (countsame + 1) * max; //非優先個數

int output = rest >= notpriority ? result : result + notpriority - rest;

return output;

}}

任務排程器演算法(leetcode621)

題目描述如下 思路 要想完成任務的時間最短,那麼必須優先處理出現次數最多的任務 如果將次數多的任務留到最後,必然在每次任務之間留出大量的等待時間 因此我們可以以n 1個任務為一輪 保證同一種任務不出現在同一輪 每一輪按出現次數順序從大到小執行,每完成一輪就重新排序依次,直到所有任務完成 例如 aaa...

leetcode 任務排程器 python3

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

任務排程器

leetcode621 解題思路一 排序 規定n 1個任務為一輪,保證同一輪中乙個任務最多只能被安排一次。在每一輪中,將當前的任務按照它們剩餘的次數降序排序,並選擇剩餘次數最多的n 1個任務依次執行。如果任務的中種類t n 1,則只能選擇全部的t種任務,其餘時間空閒。也就是利用貪心,因為冷卻時間的存...