‘’’
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))