
图二

代码:
- maxExec记录数量最多的任务数,如示例1中,最多任务数为3个,maxExec=3
- maxExecCnt记录(数量最多的任务数)有几个,如示例1中,A,B都是数量最多的,所以maxExecCnt=2
- maxExecCnt就是图二最后一列的数量
(maxExec-1)*(n+1) + 1即只做任务A也需要这么多的时间
(maxExec-1)*(n+1) + maxExecCnt即只做任务数最多的那几个任务所需要的时间(这里其实默认maxExecCnt <= n的,但其实无所谓,因为如果>n,那么len(tasks)的值一定更大)
len(tasks)更大就代表我们没有使cpu空闲,自然也就不需要考虑任务调度问题了,直接返回任务数就好了
- 最后我们输出更大的那个值就好了
func leastInterval(tasks []byte, n int) int {
cnt := map[byte]int{}
for _, t := range tasks {
cnt[t]++
}
maxExec, maxExecCnt := 0, 0
for _, c := range cnt {
if c > maxExec {
maxExec, maxExecCnt = c, 1
} else if c == maxExec {
maxExecCnt++
}
}
if time := (maxExec-1)*(n+1) + maxExecCnt; time > len(tasks) {
return time
}
return len(tasks)
}