力扣 621 任務排程器

2022-07-11 07:03:10 字數 1788 閱讀 3587

題目:

給你乙個用字元陣列 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 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種...