LeetCode-621-任务调度器

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、付费专栏及课程。

余额充值