greedy
621. 任务调度器
class Solution: def leastInterval(self, tasks: List[str], n: int) -> int: # 1. 假设任务间隔为n,最短完成任务时间就是任务总数 # 2.1 假设只有一种taskA,那么可以将A分成k组,每组间隔为n,那么执行时间为 (k-1)*(1+n) + 1. (最后一个任务A,不需要间隔了,所以是(k-1)) # 2.2 假设有多种任务A,B,且A和B的任务数相等(有m个A和m个B),那么执行时间为 (k-1)*(1+n) + m. m为任务数 # 2.3 假设有多重任务A,B,...,记最多任务数的任务为A B T,任务数目为k,那么执行时间为 (k-1) *(n-1) + p。p = len([A,B,T]) counter = collections.Counter(tasks) # 记录具有最多任务数量的任务的 任务数量 maxn = max(counter.values()) max_tasks = len([v for v in counter.values() if v == maxn]) return max(len(tasks), (maxn - 1) * (1+n) + max_tasks)