看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
给你一个用字符数组tasks
表示的CPU
需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在1
个单位时间内执行完。在任何一个单位时间,CPU
可以完成一个任务,或者处于待命状态。
然而,两个相同种类
的任务之间必须有长度为整数n
的冷却时间,因此至少有连续n
个单位时间内CPU
在执行不同的任务,或者在待命状态。
你需要计算完成所有任务所需要的最短时间 。
示例 1:
1 | 输入:tasks = ["A","A","A","B","B","B"], n = 2 |
示例 2:
1 | 输入:tasks = ["A","A","A","B","B","B"], n = 0 |
示例 3:
1 | 输入:tasks = ["A","A","A","A","A","A","B","C","D","E","F","G"], n = 2 |
提示:
1 <= task.length <= 104
tasks[i]
是大写英文字母n
的取值范围为[0, 100]
解题思路
- 我们用对象来存储每个字母出现的次数
- 那么我们从
A->A
的时间为需要等待的n
加上一个A执行的1
- 我们获取到出现次数最多的字母
A
出现了max
次,跟A
出现次数相同的字母还有maxCount
个 - 因此我们有
(max-1)*(n+1)+maxCount
特殊情况:
当maxCount
大于n+1
时,一次等待的间隔n
无法满足我们的要求,我们只能依次执行,因此此时最小的时间间隔为数组的长度
解题代码
1 | var leastInterval = function(tasks, n) { |
如有任何问题或建议,欢迎留言讨论!