欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode-Medium 621. Task Scheduler

程序员文章站 2022-03-24 14:09:28
...

题目描述

给定一个char数组表示CPU需要执行的任务。它包含大写字母A到Z,其中不同的字母代表不同的任务。每项任务都可以在一个时间间隔内完成。对于每个间隔,CPU可以完成一个任务或空闲。但是有规定一个非负整数n代表两个相同任务之间需要至少n个时间单位。球最少数量的时间单位完成所有任务。

需要返回CPU将完成所有给定任务所需的最少间隔数。

实例:

Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
Explanation: A -> B -> idle -> A -> B -> idle -> A -> B.

思路

dicussion 分享的思路concise Java Solution O(N) time O(26) space,通过分析人物队列的规律来计算:

首先考虑出现次数最多的字符,我们可以先确定它们的相对位置,然后将它们用作框架来插入剩余的不常用的字符


Leetcode-Medium 621. Task Scheduler

通过上面的分析,我们可以发现最少任务时间为:(最多任务数-1)*(n + 1) + (相同最多任务的任务个数)。

假设AAAABBBBCCDE,n=3,那么时间为:(NUM(A)-1)*(3+1)+2=14

代码实现

class Solution:
    def leastInterval(self, tasks: List[str], n: int) -> int:
        c=collections.Counter(tasks)
        mc,tie_ct=c.most_common(1)[0][1],0
        for k,v in c.most_common()[1:]:
            if v==mc:
                tie_ct+=1
            else:
                break
        return max(len(tasks),(mc-1)*n+mc+tie_ct)

参考资料