题目
解题思路
两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,
因此
执行任务的时间将由任务将其冷却时间决定,相同种类的任务数量越多,其冷却时间也就越长,为了使总体时间缩短,我们应该更早的让其进入冷却时间
核心思路:就是先找出相同元素数量最大的元素A
我们将执行一个任务及其冷却时间的等待看作一个周期
那么 完成任务A的总时间就等于(a-1)个周期加上最后一次执行即可完成A任务
对于剩下的任务
我们可以进行分类讨论
如果其余任务都可以在A 的冷却时间内完成,那么总时间即为A所使用的时间,其余任务可以忽略不计。
如果A的冷却时间内放不下其他的所有任务,那么则将时间较长的放入,剩余的另行计算
1.如果剩下的相同种类的任务中数量有与A并列第一的
那么最后一次执行任务的时候,也需要执行这个任务一次
2.其他任务长度都比A少,但数量很多,再完成A 的计算之后重复即可
代码
func leastInterval(tasks []byte, n int) int {
max:=func(x,y int)int{
if x<y{
return y
}
return x
}
tmp,res:=make(map[byte]int,0),0
for _,v:=range tasks{
tmp[v]++
}
ans:=0
for _,v:=range tmp{
ans = max(ans,v)
}
res = (ans-1)*(n+1)
for _,v:=range tmp{
if v==ans{
res++
}
}
if len(tasks)<=res{
return res
}
return len(tasks)
}
作者:Johnny-Young
链接:https://leetcode-cn.com/problems/task-scheduler/solution/tan-xin-by-yhemin/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度分析
ovo不太理解官解
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。