leetcode621|任务调度|python

该文章介绍了一个任务调度问题,计算在给定桶(n)限制下,考虑任务重复出现时的最小总排队时间。首先,统计每个任务的出现次数,然后找到出现次数最多的任务(x),计算至少需要的时间(min_time=(x-1)*(n+1)),再加上出现次数为x的任务总数。特殊情况是当按照这种方法计算的结果小于实际任务总长度时,应返回任务总长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
‘’’
A-B-待命-A-B-待命-A-B
(任务A出现的次数-)(n-1)+(出现次数为3的任务个数),即:
(3-1)
(2+1)+2=8
总排队时间=(桶个数-1)(n+1)+最后一桶的任务数
所以整体的解题步骤如下:
1、计算每个任务出现的次数
2、找出出现次数的任务,假设出现次数为x
3、计算至少需要的时间(x-1)
(n+1)记为min_time
4、计算出现次数为x的任务总数count,计算最终结果为min_time+count

特殊情况
然而存在一种特殊情况,例如:
输入:tasks=[A,A,A,B,B,B,C,C,D,D],n=2
输出:10
A B C D
A B C
A B D
执行顺序:A-B-C-A-B-D-A-B-C-D
此时如果按照上述方法计算将得到结果为8,比数组总长度10要求,应返回数组长度

count = [0]26记录26个字母出现的次数
#计算每个字母的个数,遍历,如果有就+1
count[ord(ch)-ord(“A”)+=1如果出现一次,ord() 函数获取字符 a 和 A 的 ASCII 数值
max_char = max(count)最大值
ret = (max_char -1)
(n+1)
for i in count:
if i == max_char:
ret += 1

return max(ret,len(tasks))
‘’’


class Solution:
    def leastInterval(self, tasks: List[str], n: int) -> int:
        #计算每个任务出现的次数
        count=[0]*26
        for ch in tasks:
            count[ord(ch)-ord("A")]+=1
        #找出出现次数的任务,假设出现次数为x,计算至少需要的时间(x-1)*(n+1)记为min_time
        max_char = max(count)
        ret = (max_char-1)*(n+1)
        for i in count:
            if i == max_char:
                ret +=1

        return max(ret,len(tasks))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值