解法
很有意思的一道题,思路大概是:
- 贪心:频率越大的任务先放,会造成maxfreq-1个长度至少为n的间隙,剩下的内容依次往间隙里填,填不够就只能idle了
- 我想到了上一步,但是接下来才是巧思的地方:
- 假如没有填满,最长的长度显然由maxfreq决定
- 假如填满了,长度就由任务列表的长度决定了:比如说,ABCABCAB,这时候假如有一个长为2的D,显然增加某些区间的间隔为n+1就可以办到了,比如说:ABCABCDABD,不管怎么塞,长度都等于任务列表长度。
- 取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))