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
//因此计算出来的值不准确,直接返回任务数
}
}
本文介绍了LeetCode中621题的解决方案——任务调度器。通过分析任务出现的频率,优先安排高频率任务并考虑冷却时间n,提出计算公式优化调度。在任务种类较少时,利用最大任务长度和个数计算运行时间;种类多时,运行时间等于任务总运行时间。代码实现中,首先统计任务出现次数,然后排序并找出最长任务的特性,以此来确定最短可能的执行时间。
844

被折叠的 条评论
为什么被折叠?



