Description
Solution
先统计一下不同种类的任务出现次数。
容易发现,在任意时刻,当前剩余次数最多的任务的优先级最高
故可贪心的选取当前剩余个数最多的任务(“长作业优先" )
Code
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
int num[26];memset(num,0,sizeof(num));
int sz = tasks.size();
if(n == 0) return sz;
priority_queue<int>q;
for(int i = 0;i < sz;++i) num[tasks[i]-'A']++;
for(int i = 0;i < 26;++i) if(num[i]) q.push(num[i]);
int res = 0;vector<int>tmp;
while(!q.empty()) {
int u = q.top();q.pop();
tmp.clear();
if(u!=1) tmp.push_back(u-1);
res++;
for(int i = 0;i < n;++i) {
if(q.empty()) {if(tmp.size() == 0) break;res++;}
else {if(q.top()!=1) tmp.push_back(q.top()-1); q.pop();res++;}
}
for(auto x : tmp) q.push(x);
}return res;
}
};