[LeetCode]621. Task Scheduler

621. Task Scheduler

这道题让你计算执行一系列任务所耗费的时间,根据题目要求,安排每个相同的任务之间需要经历n个空档,在这n个空档中,你可以安排其它的任务,你也可以设置为空闲。

举个例子,AAABBC,3,过程如下:

  1. 先排A,则为A___A___A
  2. 接下来在前面的基础之上排B,则为AB__AB__A
  3. 同样的方法排C,则为ABC_AB__A

我们可以发现总的时间为,三个A之间相互的距离再加上最后一个A的时间,所以它的计算公式就为:

总时间 = (3+1) * (A的个数-1) + 最后一个A所耗费的时间

代码如下:

class Solution(object):
    def leastInterval(self, tasks, N):
        """
        :type tasks: List[str]
        :type n: int
        :rtype: int
        """
        # 计算每个任务的个数
        task_counts = collections.Counter(tasks).values()
        # 计算最大任务个数
        M = max(task_counts)
        # 获取有几个任务能够被安排到最后
        Mct = task_counts.count(M)
        # 计算最大的时间
        return max(len(tasks), (M - 1) * (N + 1) + Mct)
posted @ 2017-08-19 15:12  banananana  阅读(146)  评论(0)    收藏  举报