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)

 

posted @ 2022-11-25 09:24  7aughing  阅读(77)  评论(0编辑  收藏  举报