leecode 621任务调度器

看到以前的一个疑问:列表中元素可以任意调用,不考虑顺序,怎么处理?例题是621题,复习一下。

1 统计各元素数量,把出现次数最多(x个)的元素按冷却时间放置好,冷却时间加上任务时间为n+1,t是完成n个任务的时间长度
A '' '' A '' '' A '' '' A
t = (x-1)*(n+1)+1
2 题中说每种任务的时间间隔和完成时间都相同,把其他任务插入间隔时间中,则总时间长度和上面相同
A 'B' 'B' A 'B' 'C' A 'B' '' A
t = (x-1)*(n+1)+1
3 当有m个同样最多的元素时(m<x),
A 'B' '' A 'B' '' A 'B' '' A B
t = (x-1)*(n+1)+ n
A 'B' 'C' A 'B' 'C' A 'B' 'C' A B C  D E

先将间隔填满,把多余元素放到最后。这种情况即数组长度大于 所有的A加间隔n 的情况

4 当m>x时,可直接把元素插到每个间隔最后,这样的时间长度实际上是数组长度。
 dic = {}
 #记录任务出现次数       
for item in li:
    if item not in dic:            
        dic[item] = 1
    else:
        dic[item] += 1
    
li1 = list(dic.values()) #各任务出现次数
ma = max(li1) #最大次数
c = li1.count(ma) #最大次数个数
t = (ma-1)*(n+1)+ c #总时间长度
return t if t > len(li) else len(li) #总时间长度或数组长度

感觉还是半懂半不懂的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值