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

621. 任务调度器

作者: 名字是乱打的 | 来源:发表于2022-01-03 23:44 被阅读0次

一 题目:

二 思路:

方法(贪心算法)
容易想到的一种贪心策略为:先安排出现次数最多的任务,让这个任务两次执行的时间间隔正好为n。再在这个时间间隔内填充其他的任务。

例如:tasks = ["A","A","A","B","B","B"], n = 2

  • 我们先安排出现次数最多的任务"A",并且让两次执行"A"的时间间隔为2。在这个时间间隔内,我们用其他任务类型去填充,又因为其他任务类型只有"B"一个,不够填充2的时间间隔,因此额外需要一个冷却时间间隔。具体安排如下图所示:
  • 其中,maxTimes为出现次数最多的那个任务出现的次数。maxCount为一共有多少个任务和出现最多的那个任务出现次数一样。
    图中一共占用的方格即为完成所有任务需要的时间,即:
    (maxTimes - 1)*(n + 1) + maxCount

  • 此外,如果任务种类很多,在安排时无需冷却时间,只需要在一个任务的两次出现间填充其他任务,然后从左到右从上到下依次执行即可,由于每一个任务占用一个时间单位,我们又正正好好地使用了tasks中的所有任务,而且我们只使用tasks中的任务来占用方格(没用冷却时间)。因此这种情况下,所需要的时间即为tasks的长度。
    由于这种情况时再用上述公式计算会得到一个不正确且偏小的结果,因此,我们只需把公式计算的结果和tasks的长度取最大即为最终结果。

作者:lan-se-bei-ban-qiu
链接:https://leetcode-cn.com/problems/task-scheduler/solution/jian-ming-yi-dong-de-javajie-da-by-lan-s-jfl9/
来源:力扣(LeetCode)

三 代码:

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int[] buckets= new int[26];
        //统计每个元素出现的次数
        for (char task : tasks) {
            buckets[task-'A']++;
        }

        //按出现的次数进行排序
        Arrays.sort(buckets);
        
        //最先最多次数的字符的次数
        int maxTime=buckets[25];
        //maxCount为一共有多少个任务和出现最多的那个任务出现次数一样。
        int maxCount=1;
        for (int i = 25; i >=1 ; i--) {
            if (buckets[i-1]==buckets[I]){
                maxCount++;
            }else {
                break;
            }
        }

        int res=(maxTime-1)*(n+1)+maxCount;

        //极端情况,如果任务种类多,不需要冷却,直接就运行就ok,那么所需时间为任务的长度
        return Math.max(res,tasks.length);
    }
}

相关文章

  • 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/qmgfcrtx.html