題目
給你乙個用字元陣列 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 輸出 ...