621. Task Scheduler
因为存在 cooldown period,我们需要尽可能稀疏排开同一种任务,要尽可能总时间小,那就先排出现次数最多的任务(A),然后按出现次数逐个排进来,排到没得排了,就补齐 idle time,再排下一个 A。
Heap
这种按照sort顺序逐个拿元素,先想到heap
做(因为python 的heap默认最小堆,这边取value负数来实现最大堆)。
Count Slot
如果把 most common task A 的 cooldown period 塞满前,就分配完了所有任务,那么最后的时间长度就是 # of slot + # of most common task
要是把 cooldown 塞满了还有 task 没有分配,那就要拓展 slot,相当于 reorder tasks,最后时间长度就等于 total # of task
class Solution:
def leastInterval(self, tasks: List[str], n: int) -> int:
count = Counter(tasks)
mTask, mN = count.most_common()[0]
tie = len([t for (t, freq) in count.items() if freq == mN])
return max(len(tasks),
(mN-1) * (n+1) + tie)
Last updated
Was this helpful?