美文网首页程序员
力扣 621 任务调度器

力扣 621 任务调度器

作者: zhaojinhui | 来源:发表于2020-08-18 11:44 被阅读0次

题意:给定一个任务列表和相同任务执行的冷冻间隔n,求执行完所有任务的最小的时间

思路:隔板法,把出现次数最多的一个task当作隔板

  1. 找出最多task的个数max和出现次数为max的task的个数cnt,
  2. 那么可能的interval即为,(max-1)*n (得到中间间隔的task总数+max(隔开间隔的task数)+cnt - 1(末尾出现次数为max的其他task的个数)
  3. 返回可能的interval和总task的较大值

思想:数学方法

复杂度:时间O(n),空间O(n)

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int len = tasks.length;
        if(len == 0)
            return 0;
        int max = 0;
        int sum = 0;
        HashMap<Character, Integer> map = new HashMap();// 可以用一个char array替代hashmap
        // 统计同一个task出现的个数,并找出出现最多的task
        for(int i=0;i<len;i++) {
            char cur = tasks[i];
            map.put(cur, map.getOrDefault(cur, 0) + 1);
            max = Math.max(map.get(cur), max);
        }
        int cnt = 0;
        // 找出出现最多的task的个数,并统计task总共的个数
        for(int value: map.values()) {
            if(value == max)
                cnt++;
            sum += value;
        }
        // 返回可能的interval和总共task的较大值
        return Math.max((max - 1) * n + max + cnt - 1, sum);
    }
}

相关文章

  • 力扣 621 任务调度器

    题意:给定一个任务列表和相同任务执行的冷冻间隔n,求执行完所有任务的最小的时间 思路:隔板法,把出现次数最多的一个...

  • 621. 任务调度器

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

  • 621. 任务调度器

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

  • 621. 任务调度器

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

  • 621任务调度器

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

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

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

  • LeetcodeT621

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

  • 分布式调度器Quartz解读

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

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

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

  • 任务调度器

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

网友评论

    本文标题:力扣 621 任务调度器

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