給你乙個用字元陣列 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
1 <= task.length <= 104
tasks[i] 是大寫英文本母
n 的取值範圍為 [0, 100]
先找出執行次數最多的任務,令其執行次數為x,維護乙個x * (n + 1)的矩陣。
class
solution
;static
bool
cmp(
int x,
int y)
intleastinterval
(vector<
char
>
& tasks,
int n)
sort
(a, a +
'z'+
1, cmp)
;int x = a[0]
;int sum = x *
(n +1)
;if(tasks.
size()
>= sum)
return tasks.
size()
;else}}
;
Leetcode 621任務排程
首先統計同型別的任務數,然後從大到小排序 因為數量多的任務才會因為重複,需要間隔期 排序不影響結果,無論是三個a和兩個b,還是兩個a和三個b結果是一樣的。想法是有多個桶 桶的個數取決於數量最多的任務數 桶的容量至少是n 1,桶內元素不重複,如果元素不能填滿,就需要填入冷卻時間。如果多餘元素數量大於等...
leetcode 621 任務排程器
給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為n的冷卻時...
LeetCode 621 任務排程器
給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為n的冷卻時...