621. 任务调度器


给定一个用字符数组表示的 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. 任务的总个数为 [1, 10000]。
  2. n 的取值范围为 [0, 100]。

解题思路:统计每种任务的数量,计max_count数量最大值,计num_max_count为任务数量等于max_count的任务种类数,那么最短时间=max((max_count-1)*(n+1)+num_max_count,len(tasks))

原理解释如下:

假设A为tasks中数量最大的任务种类,n为2,那么执行顺序为AXXAXXAXX...A,其中X代表其他任务种类或者待命状态间隔插空,即可在最短时间内完成所有任务的调度。

假设A,B同为tasks中数量最大的任务种类,n为2,那么执行顺序为ABXXABXXABXX...AB,其中X代表其他任务种类或者待命状态间隔插空,即可在最短时间内完成所有任务的调度。

为什么要对len(tasks)取较大值呢?因为当n较小时,比如0,num_max_count较大时,比如2,n+1可能就不能表示每段任务序列的长度。例子:[A,AA,B,B,B],n = 0,调度顺序为ABABAB,按照公式计算(3-1)*(0+1)+2 = 4,其中(0+1)不能表示任务子序列的长度。

Python3代码如下:

class Solution(object):def leastInterval(self, tasks, n):""":type tasks: List[str]:type n: int:rtype: int"""d = collections.Counter(tasks)max_count = 0for key in d:max_count = max(max_count,d[key])num_max_count = 0for key in d:if d[key] == max_count:num_max_count += 1return max((max_count-1)*(n+1)+num_max_count,len(tasks))

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 ...

最新文章

  1. python恶搞小程序-知道了这个,你也能写出 Python 趣味小程序
  2. 使用Rainbow tables和Ophcrack的组合工具破解Windows密码
  3. 网站的Http请求转为Https请求
  4. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(三)
  5. python 协程可以嵌套协程吗_Python线程、协程探究(2)——揭开协程的神秘面纱...
  6. plt图片输出 python_利用Python制作词云,wordcloud神器你值得拥有
  7. Python编程 高阶函数使用技巧
  8. pointcut注解_Spring AOP使用指南,详细了解AOP相关注解
  9. [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
  10. Leetcode--123. 买卖股票的最佳时间Ⅲ
  11. 原版英文书籍《Linux命令行》阅读记录4 | 操作文件和目录
  12. 元素周期表排列的规律_元素周期表排列规律
  13. 码云、coding拉取项目代码
  14. 想要改变自己,请先突破这3个自我限制
  15. 只要实现了annotation这个接口就是注解 同理:只要实现了某个接口就是该类型的实现类...
  16. python提高——进程、线程、协程对比及代码实现
  17. 从源码角度看ContentProvider
  18. AppWidget实现机制分析--launcher添加和删除appwidget深入分析
  19. json 插入数据_Oracle Database 20c:JSON功能增强
  20. MySQL 数据库索引优化项目实战

热门文章

  1. 大促期间如何选择淘宝店铺托管?
  2. 2021Java高级面试题总结:java实现银行存取款
  3. MATLAB中PSF函数进行图像复原
  4. 反卷积 算法 c语言,多次曝光图像的PSF反卷积以及欠采样图像的反混叠技术I:PSFdeLRSA的制作方法...
  5. Ubuntu树莓派的putty、ftp、Xming、VNC远程连接操作教程
  6. 正胶显影液/正胶稀释剂/SU8 显影液/RD-HMDS/OMNICOAT光刻胶配套
  7. spring security登陆认证成功后无法控制权限
  8. [004]爬虫系列 | 中文编码问题
  9. 2021美赛数学建模A题翻译版
  10. 神医视频消重软件,集合了消重跟视频原创制作于一体神器