Leetcode刷題筆記 621 任務排程器

2021-10-11 09:46:02 字數 2067 閱讀 8977

題目

給你乙個用字元陣列 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

提示

解法

這種題 先畫圖模擬一下 找找規律

用乙個陣列記錄每個任務出現的次數

找出最大的任務量x 然後模擬 最多的任務中有x-1個空隙 每個空隙處理n個不同型別的任務

按照剩餘任務量最多的排序 處理任務 如果沒有任務了就返回

最後 先+1 最多工的尾 再看看還有沒有剩餘的任務

近一步發現 我們只需要得到最多的任務量數 和 有最多工量數的任務型別數 就可以求結

**

#include

#include

#include

using

namespace std;

/*class solution

}nums[maxid] = 0;

int re = tasks.size() - maxcount;

for(int i = 0; i < maxcount-1; i++)

else

break;}}

int x = (maxcount-1)*(n+1)+1;

for(int i=0;i<26;i++)

}return x;

}};*/

class

solution

}int maxnumcount =0;

for(

int i =

0;i <

26;i++

)return

max(

(maxcount-1)

*(n+1)

+maxnumcount,numsize );}

};intmain()

今天也是愛zz的一天哦!

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...

LeetCode刷題筆記

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...