【golang】leetcode中级-任务调度器

wric

题目

image.png

解题思路

两个 相同种类 的任务之间必须有长度为整数 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度分析

image.png

ovo不太理解官解

阅读 525
10 声望
3 粉丝
0 条评论
10 声望
3 粉丝
文章目录
宣传栏