題目:
給你乙個用字元陣列 tasks 表示的 cpu 需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。在任何乙個單位時間,cpu 可以完成乙個任務,或者處於待命狀態。
然而,兩個 相同種類 的任務之間必須有長度為整數 n 的冷卻時間,因此至少有連續 n 個單位時間內 cpu 在執行不同的任務,或者在待命狀態。
你需要計算完成所有任務所需要的 最短時間 。
示例1:輸入:tasks = ["
a","
a","
a","
b","
b","
b"], n = 2
輸出:8
解釋:a -> b -> (待命) -> a -> b -> (待命) -> a ->b
在本示例中,兩個相同型別任務之間必須間隔長度為 n = 2
的冷卻時間,而執行乙個任務只需要乙個單位時間,所以中間出現了(待命)狀態。
示例2:
輸入:tasks = ["
a","
a","
a","
b","
b","
b"], n = 0
輸出:6
解釋:在這種情況下,任何大小為
6 的排列都可以滿足要求,因為 n = 0["
a","
a","
a","
b","
b","b"
]["a
","b
","a
","b
","a
","b"]
["b","
b","
b","
a","
a","a"
]...
諸如此類
示例3:
輸入:tasks = ["
a","
a","
a","
a","
a","
a","
b","
c","
d","
e","
f","
g"], n = 2
輸出:16
解釋:一種可能的解決方案是:
a -> b -> c -> a -> d -> e -> a -> f -> g -> a -> (待命) -> (待命) -> a -> (待命) -> (待命) -> a
這個題主講得太好了,他用到了桶思想,我想記錄一下,下方是連線
//這裡我們先找到出現次數最多的任務,假設max=6,那麼就設定6個桶,每個桶的大小是n+1。一直填桶,我們會發現執行時間是(桶數-1)*(n+1)+最後乙個桶的任務數。//假設我們所有桶都填滿了,但是還有多餘的任務怎麼辦呢?我們可以擴充桶的大小,即插入前面的桶裡面,無論我們怎麼插,都是滿足冷卻時間了,所以此時時間就是任務數。
class
solution
sort(hash.rbegin(),hash.rend()); //公升序排序
int len=tasks.size();
int last=1
; //記錄最後乙個桶的任務數
while(last0]) last++;
return max(len,last+(hash[0]-1)*(n+1
));
}};
621 任務排程器
621.任務排程器 給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必...
621 任務排程器
給你乙個用字元陣列 tasks 表示的 cpu 需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。在任何乙個單位時間,cpu 可以完成乙個任務,或者處於待命狀態。然而,兩個 相同種類 的任務之間必須有長度為整數 n 的冷卻時...
621 任務排程器
2020 06 12 任務排程器 給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種...