LeetCode-621-任务调度器

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

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
        //因此计算出来的值不准确,直接返回任务数
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值