python代码如下:
class Solution(object):
def leastInterval(self, tasks, n):
"""
:type tasks: List[str]
:type n: int
:rtype: int
"""
count,time = collections.Counter(tasks), 0
most = count.most_common(1)[0][1]
for i in count.values():
if i == most:
time += 1
output = (most - 1) * (n + 1) + time
return output if output >= len(tasks) else len(tasks)
我的理解
- 任务管理器的运行时间关键要看因为冷却要求导致的CPU空闲时间。可以直观想象,如果各种任务的数量差别不是很大,任务的种类又很多的话,我们就更有机会妥善安排任务执行顺序,将空闲时间降至0.因此,CPU的空闲时间关键要看任务次数最多的任务的执行情况。
- 我们依据冷却时间n的要求,构建n+1个桶子,桶子中的任务按层逐个执行。可以想象,我们可以把最多的任务放在一个筒子里,以防止出现未冷却就执行的情况。
具体图解见【任务调度器】C++ 桶子_配图理解