LeetCode-621-任务调度器
思路
先安排出现次数多的任务,让这个任务的间隔刚好为n,在该任务冷却时执行其他任务
例如:tasks = [“A”,“A”,“A”,“B”,“B”,“B”], n = 2
那么,可以给出计算公式
(maxTimes-1)*(n+1)+maxCount
maxTimes表示最长任务的长度,maxCount表示最长任务的个数
当然以上情况出现在任务种类比较少的情况,当任务种类多时,那么在冷却时间可以填满其他任务,此时,运行时间就是任务的总运行时间
代码
class Solution {
public int leastInterval(char[] tasks, int n) {
int []task=new int[26];
for(int i=0;i<tasks.length;i++){
task[tasks[i]-'A']++;
}
Arrays.sort(task);
int maxTimes=task[25];
int maxCount=0;
for(int i=25;i>=0;i--){
if(maxTimes==task[i])maxCount++;
else break;
}
return Math.max(tasks.length,(maxTimes-1)*(n+1)+maxCount);
//当参数为["A","A","A","B","B","B"],0 时,冷却时间为0
//因此计算出来的值不准确,直接返回任务数
}
}