leetcode - 16 任务调度器

任务调度器

给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。

然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。

你需要计算完成所有任务所需要的最短时间。

示例 :

输入:tasks = [“A”,“A”,“A”,“B”,“B”,“B”], n = 2
输出:8
解释:A -> B -> (待命) -> A -> B -> (待命) -> A -> B.
在本示例中,两个相同类型任务之间必须间隔长度为 n = 2 的冷却时间,而执行一个任务只需要一个单位时间,所以中间出现了(待命)状态。

提示:

任务的总个数为 [1, 10000]。
n 的取值范围为 [0, 100]。

这个需要分析一下,先找到最多的任务:
A _ _ _
A _ _ _
A _ _ _
A
这是保底消耗,然后从多到少考虑填满这些空位,如果还有多的补在后面即可。

class Solution:
    def leastInterval(self, tasks: List[str], n: int) -> int:
        ma = 0
        num = {}
        for i in set(tasks):
            if tasks.count(i) > ma:
                ma = tasks.count(i)
                maxt = i
            num[i] = (tasks.count(i))
        num = dict(sorted(num.items(), key=lambda d:d[1], reverse = True))
        ans = 0
        cnt = 0
        for i in num:
            if num[i] != ma:
                ans += num[i]
            else:
                ans += (num[i]-1)
                cnt += 1
        return cnt + max((n+1)*(ma-1),ans)

你可能感兴趣的:(leetcode,leetcode,算法)