621. 任务调度器
程序员文章站
2022-07-12 12:55:12
...
1.题目
-
eg:
输入: tasks = ["A","A","A","B","B","B"], n = 2
输出: 8
执行顺序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.
- 题目解释:链接
- 这道题目不需要去再次刷,题目的技巧性太强
2.代码
所以整体的解题步骤如下:
计算每个任务出现的次数
找出出现次数最多的任务,假设出现次数为 x
计算至少需要的时间 (x - 1) * (n + 1),记为 min_time
计算出现次数为 x 的任务总数 count,计算最终结果为 min_time + count
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
vecot<int> res(26,0);
for (int i=0;i<tasks.size();++i)
{
++res[tasks[i]-'A'];
}
sort(res.begin(),res.end());
int i=25,x=res[25];
while (i>=0 && x==res[i]) --i;
return max(res.size(),(x-1)*(n+1)+(25-i));
}
};