621 任務排程器

2021-10-10 23:11:52 字數 1294 閱讀 4464

621. 任務排程器

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

然而,兩個相同種類的任務之間必須有長度為 n 的冷卻時間,因此至少有連續 n 個單位時間內 cpu 在執行不同的任務,或者在待命狀態。

你需要計算完成所有任務所需要的最短時間。

示例 :

輸入:tasks = ["a","a","a","b","b","b"], n = 2

輸出:8

解釋:a -> b -> (待命) -> a -> b -> (待命) -> a -> b.

在本示例中,兩個相同型別任務之間必須間隔長度為 n = 2 的冷卻時間,而執行乙個任務只需要乙個單位時間,所以中間出現了(待命)狀態。 

任務的總個數為 [1, 10000]。

n 的取值範圍為 [0, 100]。

基本思路:首先,是使用雜湊表儲存每個任務的個數,當任務只需要1輪時,即每個任務的個數都是1次,結果就是任務數;當需要進行多輪時,決定輪數的是同類任務個數最多的,同時每輪的時間大於等於n+1,具體要分兩種情況討論:

也可以用桶來演示,一共s輪,代表有s個桶,其中,每個桶都大於等於n+1(包括冷卻),裝桶規則,在每個桶都大於n+1之前,盡量將每個桶都裝滿(也就是說每一輪中,不必將所有不同任務都過一遍),每個桶裝大於n+1後,總耗時就是任務總數

int leastinterval(vector& tasks, int n) 

sort(dict.rbegin(),dict.rend()); //逆序

//sort(dict.begin(),dict.end(),(int& x,int&y));

while(cnt基本思路: 基於上述思路,也可以使用排序的方法,類似與優先佇列,每一輪按照同類任務數目的多少制定優先順序。

int leastinterval(vector& tasks, int n)

sort(dict.rbegin(),dict.rend()); //逆序

//sort(dict.begin(),dict.end(),(int& x,int&y));

while(dict[0]>0)

i++;

cnt++;

}sort(dict.rbegin(),dict.rend());

}return cnt;

}

621 任務排程器

給你乙個用字元陣列 tasks 表示的 cpu 需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。在任何乙個單位時間,cpu 可以完成乙個任務,或者處於待命狀態。然而,兩個 相同種類 的任務之間必須有長度為整數 n 的冷卻時...

621 任務排程器

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

leetcode 621 任務排程器

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