给定一个用字符数组表示的 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]。

思路:

由于相同的任务之间必须有 n 的冷却时间,所以我们可以想到按照任务的数量来安排它们,即一种任务的出现次数越多,我们就越早地安排。例如有 5 种任务 A, B, C, D, E,且它们分别有 6, 1, 1, 1, 1 个时,假设冷却时间 n = 2,那么我们首先安排任务 A,随后在 2 单位的冷却时间里,我们安排任务 B, C,随后继续安排任务 A,再安排任务 D, E,以此类推。

也就是在最多的一种任务里面,穿插其他任务

提交的代码:

class Solution {
    public int leastInterval(char[] tasks, int n) {
       int[] map = new int[26];
        for (char c: tasks)
            map[c - 'A']++;
        Arrays.sort(map);
        int time = 0;
        while (map[25] > 0) {
            int i = 0;
            while (i <= n) {
                if (map[25] == 0)
                    break;
                if (i < 26 && map[25 - i] > 0)
                    map[25 - i]--;
                time++;
                i++;
            }
            Arrays.sort(map);
        }
        return time;

}
}

Leetcode--621. 任务调度器相关推荐

  1. LeetCode 621. 任务调度器(贪心)

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

  2. Leetcode 621. 任务调度器 解题思路及C++实现

    方法一:贪心算法 解题思路: 使用贪心的思想,先把出现最多的任务分配了(即每隔n个单位时间分配一个任务),然后再把其它任务填上.如下图 所以需要先计算各任务出现的次数,找到出现最多的任务,程序中使用m ...

  3. leetcode 621. 任务调度器(贪心算法)

    给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表.其中每个字母表示一种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完.在任何一个单位时间,CPU ...

  4. leetcode - 621. 任务调度器

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

  5. leetcode 621. Task Scheduler | 621. 任务调度器(Java)

    题目 https://leetcode.com/problems/task-scheduler/ 题解 似懂非懂的答案,https://leetcode-cn.com/problems/task-sc ...

  6. 【LeetCode笔记】621. 任务调度器(Java、桶)

    文章目录 题目描述 代码 && 思路 1. 直白的 ac 做法 O(n).O(n) 2. 桶排思想的做法 O(n).O(n) 二刷 打卡第十六天- 题目描述 有点阅读题的意思,可以结合 ...

  7. LeetCode 热题 HOT 100 -------31. 下一个排列(数组,数学问题)128. 最长连续序列(数组) 11. 盛最多水的容器(数组) 621. 任务调度器 (数组)

    dsadas /**思路:找下一个排列,并且尽可能小,所以我们应该找一序列中从左边开始的"较小值"与"较大值"交换,但是为了尽可能小应该满足: 1." ...

  8. 621. 任务调度器

    文章目录 1.题目 2.代码 1.题目 题目要求 eg: 输入: tasks = ["A","A","A","B",&q ...

  9. LeetCode第 621 题:任务调度器 (C++)

    621. 任务调度器 - 力扣(LeetCode) 做法很多,这位同学的解释是最通俗易懂的:[任务调度器]C++ 桶子_配图理解 class Solution { public:int leastIn ...

  10. LeetCode-621. 任务调度器

    621. 任务调度器 给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时 ...

最新文章

  1. 搭建网站服务器是选择高配置还是选择性能稳定?
  2. js中的一个方法怎么将数据主动传给另一个方法
  3. .net 的水晶报表在push模式下的多表关联问题
  4. OpenCV绘图和文本输出功能的实例(附完整代码)
  5. 学习:ASP.NET中App_Code,App_Data等文件夹的作用(转)
  6. cas java单点登录_java单点登录系统CAS的简单使用
  7. 在Vue中使用JSX,很easy的
  8. Spring Boot 集成 Redis 实现缓存机制
  9. ActiveMQ简单介绍以及安装
  10. Java之Windows下环境搭建配置
  11. linux445端口是什么,端口445怎么关 445端口是什么服务 445病毒是什么
  12. 机器学习基石第十三讲笔记
  13. 【科学文献计量】Metaknowledge文献数据分析基础(Record、Citation和RecordCollection对象介绍)
  14. error LNK2005: public: virtual __thiscall CMemDC::~CMemDC(void) (??1CMemDC@@UAE@XZ) already de
  15. mac 无法对计算机进行更改,解析深度技术win10 MAC不能修改的原因和解决成功的技巧...
  16. it试用评估_it员工转正自我评价
  17. 企业发文的红头文件_实例分享:怎样制作双发文单位红头文件,文件二字与发文单位并排...
  18. ubuntu录制屏幕及视频处理
  19. 三个臭皮匠赛过诸葛亮!白话Blending和Bagging
  20. VUzzer: Application-aware Evolutionary Fuzzing

热门文章

  1. Pandas入门1(DataFrame+Series读写/Index+Select+Assign)
  2. LeetCode 273. 整数转换英文表示
  3. LeetCode 701. 二叉搜索树中的插入操作(二叉查找树/插入)
  4. android menu xml 属性,Android中Menu类型及常见属性说明
  5. Matplotlib - 散点图 scatter() 所有用法详解
  6. 前端安全系列(二):如何防止CSRF攻击?
  7. 论文浅尝 | IRW:基于知识图谱和关系推理的视觉叙事框架
  8. 论文浅尝 | 基于对抗学习的弱监督知识图谱对齐
  9. 论文征集 | 2019 Joint International Semantic Technology Conference
  10. 技术动态 | 北京大学计算机所邹磊教授研究组开源面向 RDF 知识图谱的自然语言问答系统 gAnswer...