LeetCode 621. Task Scheduler
阿新 • • 發佈:2018-12-12
題解
比較有意思的題,不太好歸類,應該是貪心。 這題的只要換個思路就好做了,就是算idle的時間有多長,因為task必然耗時。 給一篇寫得很完備的英文解析 簡介幾個核心點:
- 有最大頻率的任務,會創造最長的時間間隔如 A _ _ A _ _ A (n=2)
- 這些間隔 _ 可用來放置其他任務,或者留作idle
- 如果間隔不夠,那麼恭喜你我們不需要idle(思考為什麼)
- 特例 有相同最大頻率的不同任務。
Code
class Solution {
public:
int cot[26];
int leastInterval(vector<char>& tasks, int n) {
memset(cot,0,sizeof(cot));
for(char c:tasks){
cot[c-'A']++;
}
int sum=0,cur_max = 0, max_count=0;
for(int i=0;i<26;i++){
sum+=cot[i];
if(cot[i]==cur_max) max_count++;
if(cur_max < cot[i]){
cur_max = cot[i];
max_count = 1;
}
}
int countparts = cur_max-1;
int partLen = n - max_count+1;
int slots = countparts*partLen;
int idles = max(0 , slots - (sum- max_count*cur_max) );
return sum+idles;
}
};