給定乙個用字元陣列表示的 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種任務,其餘時間空閒。也就是利用貪心,因為冷卻時間的存...