621. 任務調(diào)度器

題目描述:

給定一個用字符數(shù)組表示的 CPU 需要執(zhí)行的任務列表。其中包含使用大寫的 A - Z 字母表示的26 種不同種類的任務。任務可以以任意順序執(zhí)行,并且每個任務都可以在 1 個單位時間內(nèi)執(zhí)行完。CPU 在任何一個單位時間內(nèi)都可以執(zhí)行一個任務,或者在待命狀態(tài)。

然而,兩個相同種類的任務之間必須有長度為 n 的冷卻時間,因此至少有連續(xù) n 個單位時間內(nèi) CPU 在執(zhí)行不同的任務,或者在待命狀態(tài)。

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

示例 1:

輸入: tasks = ["A","A","A","B","B","B"], n = 2
輸出: 8
執(zhí)行順序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.

注:

任務的總個數(shù)為 [1, 10000]。
n 的取值范圍為 [0, 100]。

思路:

完成所有任務的最短時間取決于出現(xiàn)次數(shù)最多的任務數(shù)量。
1、由于兩個相同種類的任務之間必須有長度為 n 的冷卻時間,因此我們先把出現(xiàn)次數(shù)最多的任務A安排上,上面例子中n=2,那么任意兩個A任務之間必須要有2個單位的時間:
A -> (單位時間) -> (單位時間) -> A -> (單位時間) -> (單位時間) -> A
2、中間間隔的單位時間可以用來安排別的任務,也可以處于“待命”狀態(tài)。當然為了是任務在最短時間內(nèi)完成,我們需要把間隔的單位時間盡可能的安排其他任務,現(xiàn)在我們把B任務也安排上:
A -> B -> (單位時間) -> A -> B -> (單位時間) -> A -> B
3、我們能夠看出,前面2個A任務一定會跟著2個單位時間間隔(最后一個A是否還有任務跟隨,取決于是否存在與A任務出現(xiàn)次數(shù)相同的B任務。)
上面執(zhí)行順序的規(guī)律是: 有count - 1個A(count為A任務的出現(xiàn)次數(shù)),其中每個A需要搭配n個單位時間,再加上最后一個A,所以總時間為 (count - 1) * (n + 1) + 1=(3-1)*(2+1)+1=7;
4、可能會出現(xiàn)多個頻率相同的任務,比如 ["A","A","A","B","B","B","C","C"],所以最后會剩下一個A和一個B,因此最后要加上頻率相同的不同任務的個數(shù);
5、公式算出的值可能會比數(shù)組的長度小,如["A","A","B","B"],n = 0,此時要取數(shù)組的長度。

Java解法:

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int len = tasks.length;
        if (len <= 1 || n < 1){
            return len;
        }
        int[] counts = new int[26];
        for (int i = 0; i < len; i++)
        {
            counts[tasks[i]-'A']++;
        }
        Arrays.sort(counts);
        int maxCount = counts[25];
        int ans = (maxCount - 1) * (n + 1) + 1;
        int j = 24;
        while (j >= 0 && counts[j] == maxCount)
        {
            ans++;
            j--;
        }
        return Math.max(ans, len);
    }
}

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/add-two-numbers

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容