乐趣区

关于golang:golangleetcode中级任务调度器

题目

解题思路

两个 雷同品种 的工作之间必须有长度为整数 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 不太了解官解

退出移动版