任务调度器
Contents
问题描述
- 给定一个任务队列,每个任务都可以在1个单位时间内完成,但两个相同任务之间必须有长度为n的冷却时间,计算完成所有任务所需最短时间
- https://leetcode-cn.com/problems/task-scheduler/
思路
- 按照n+1为一轮,本轮中不能安排重复的任务,要么安排不同的任务,要么使CPU暂停,需要注意当所有任务都做完时,及时结束!
- 在同一轮中安排任务时,在任务不重复的前提下,还需要保证数量多的任务先被安排!
- 按照上述贪心算法执行,就可以得到最优完成时间。
细节
- 如何保证数量多的任务先被安排?排序或优先级队列(大根堆)
- 在使用优先级队列时,如何保证在同一轮中不会安排重复的任务?将被安排过的任务从优先级队列中删除,并添加到一个容器tmp中,当一轮结束时,再重新添加到优先级队列中。
- 如何判断是否所有任务都已经被安排了?如果用排序,就判断最多的一个任务是否为0;如果用优先级队列则判断优先级队列中以及tmp是否都为空。
- 这道题只需要记录任务数量,不需要记录任务名称,因为不需要输出具体安排!
Author 段新朋
LastMod 2020-07-12