1. 程式人生 > >LeetCode 621. Task Scheduler

LeetCode 621. Task Scheduler

題解

比較有意思的題,不太好歸類,應該是貪心。 這題的只要換個思路就好做了,就是算idle的時間有多長,因為task必然耗時。 給一篇寫得很完備的英文解析 簡介幾個核心點:

  1. 有最大頻率的任務,會創造最長的時間間隔如 A _ _ A _ _ A (n=2)
  2. 這些間隔 _ 可用來放置其他任務,或者留作idle
  3. 如果間隔不夠,那麼恭喜你我們不需要idle(思考為什麼)
  4. 特例 有相同最大頻率的不同任務。

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; } };