621. Task Scheduler

本文深入探讨了一种基于贪心算法的任务调度策略,该策略通过优先安排高频任务,并巧妙利用任务之间的空隙填充低频任务,以实现最短的执行时间。文章详细分析了算法的逻辑,包括如何确定最优的调度顺序,以及如何处理无法完全填充空隙的情况。最后,提供了一个Python实现的例子。
摘要由CSDN通过智能技术生成

解法

很有意思的一道题,思路大概是:

  1. 贪心:频率越大的任务先放,会造成maxfreq-1个长度至少为n的间隙,剩下的内容依次往间隙里填,填不够就只能idle了
  2. 我想到了上一步,但是接下来才是巧思的地方:
  • 假如没有填满,最长的长度显然由maxfreq决定
  • 假如填满了,长度就由任务列表的长度决定了:比如说,ABCABCAB,这时候假如有一个长为2的D,显然增加某些区间的间隔为n+1就可以办到了,比如说:ABCABCDABD,不管怎么塞,长度都等于任务列表长度。
  1. 取1和2中最大的那个就行
class Solution(object):
    def leastInterval(self, tasks, n):
        """
        :type tasks: List[str]
        :type n: int
        :rtype: int
        """
        from collections import Counter
        freq = list(sorted(Counter(tasks).values(), reverse=True))
        maxfreq = freq[0]
        cnt = freq.count(maxfreq)
        return max((maxfreq-1)*n+maxfreq+cnt-1, len(tasks))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值