LeetCode-630-课程表 3
题目
这里有 n 门不同的在线课程,按从 1 到 n 编号。给你一个数组 courses,其中 courses[i] = [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课,并且必须在不晚于 lastDayi 的时候完成。
你的学期从第 1 天开始。且不能同时修读两门及两门以上的课程。
返回你最多可以修读的课程数目。
示例
|
|
|
|
|
|
解答
要尽可能多的课程被选择,我们优先选择结束时间最早的课程,这样才能保证前面的课程是能被选择的,光靠这个进行选择是不行的。例如:[1,2] 、[3, 4]、[2, 5]这三门课的时候,如果按照上述方法进行选择,那么结果是:选择第一个课程,在选择第二个课程时候截止时间到了,不行,只能选择第三号课程。我们观察可以发现,其实可以先选三号课程,在选择 2 号课程。也就是在上述条件的基础上,优先选择**学习时长更短 (duration)**的课程。使用大根堆可以满足我们的要求,我们在选择课程的时候做一判断:
- 如果总学习时间 + 当前课程的学习时间<该课程的结束时间,那么这个课可以选择;
- 如果不满足条件 1,但是满足,在已经选择的课程中,最长的课程时间>当前的课程持续时间,那么就选择当前的课程,并把之前选择的最长的课程取消选择。
代码
|
|