欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

621. 任务调度器

程序员文章站 2022-07-12 12:55:12
...

文章目录

1.题目

输入: 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));
    }
};