美文网首页
621. 任务调度器

621. 任务调度器

作者: 周英杰Anita | 来源:发表于2019-12-17 17:29 被阅读0次

题目描述:

给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。

然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。

你需要计算完成所有任务所需要的最短时间。

示例 1:

输入: tasks = ["A","A","A","B","B","B"], n = 2
输出: 8
执行顺序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.

注:

任务的总个数为 [1, 10000]。
n 的取值范围为 [0, 100]。

思路:

完成所有任务的最短时间取决于出现次数最多的任务数量。
1、由于两个相同种类的任务之间必须有长度为 n 的冷却时间,因此我们先把出现次数最多的任务A安排上,上面例子中n=2,那么任意两个A任务之间必须要有2个单位的时间:
A -> (单位时间) -> (单位时间) -> A -> (单位时间) -> (单位时间) -> A
2、中间间隔的单位时间可以用来安排别的任务,也可以处于“待命”状态。当然为了是任务在最短时间内完成,我们需要把间隔的单位时间尽可能的安排其他任务,现在我们把B任务也安排上:
A -> B -> (单位时间) -> A -> B -> (单位时间) -> A -> B
3、我们能够看出,前面2个A任务一定会跟着2个单位时间间隔(最后一个A是否还有任务跟随,取决于是否存在与A任务出现次数相同的B任务。)
上面执行顺序的规律是: 有count - 1个A(count为A任务的出现次数),其中每个A需要搭配n个单位时间,再加上最后一个A,所以总时间为 (count - 1) * (n + 1) + 1=(3-1)*(2+1)+1=7;
4、可能会出现多个频率相同的任务,比如 ["A","A","A","B","B","B","C","C"],所以最后会剩下一个A和一个B,因此最后要加上频率相同的不同任务的个数;
5、公式算出的值可能会比数组的长度小,如["A","A","B","B"],n = 0,此时要取数组的长度。

Java解法:

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int len = tasks.length;
        if (len <= 1 || n < 1){
            return len;
        }
        int[] counts = new int[26];
        for (int i = 0; i < len; i++)
        {
            counts[tasks[i]-'A']++;
        }
        Arrays.sort(counts);
        int maxCount = counts[25];
        int ans = (maxCount - 1) * (n + 1) + 1;
        int j = 24;
        while (j >= 0 && counts[j] == maxCount)
        {
            ans++;
            j--;
        }
        return Math.max(ans, len);
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

相关文章

  • 621. 任务调度器

    题目描述: 给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 ...

  • 621. 任务调度器

    解法 用桶的思路,按最大元素数进行分桶,每个桶的容量为n+1,这样最大元素数就能保证可以执行,要么有空闲,要么没空...

  • 621. 任务调度器

    一 题目: 二 思路: 方法(贪心算法)容易想到的一种贪心策略为:先安排出现次数最多的任务,让这个任务两次执行的时...

  • 621. 任务调度器/875. 爱吃香蕉的珂珂

    621. 任务调度器 相关标签: 贪心 数组 队列 875. 爱吃香蕉的珂珂 相关标签: 二分查找

  • LeetcodeT621

    621. 任务调度器 难度中等231 收藏 分享 切换为英文 关注 反馈 给定一个用字符数组表示的 CPU 需要执...

  • 分布式调度器Quartz解读

    术语: scheduler:任务调度器 job: 被调度的任务 trigger:触发器,用于定义Job调度时间规则...

  • 分布式任务调度系统设计

    一、思路 任务调度器、任务执行器、任务 任务调度器不关心业务逻辑,只关心任务的触发策略、失败策略、路由策略、阻塞处...

  • 任务调度器

    题目描述:给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种...

  • 任务调度器

    Quartz Scheduler 开源任务调度框架, simple use 1.注册Job 方式1,实现job接口...

  • 定时任务框架Quartz

    定时任务框架! 定时任务就是分为三个模块:任务、触发器、调度器 过程就是,调度器协调触发器来再固定时间去触发任务!

网友评论

      本文标题:621. 任务调度器

      本文链接:https://www.haomeiwen.com/subject/jwblnctx.html