这里有 n 门不同的在线课程,按从 1 到 n 编号。给你一个数组 courses ,其中 courses[i] = [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课,并且必须在不晚于 lastDayi 的时候完成。
你的学期从第 1 天开始。且不能同时修读两门及两门以上的课程。
返回你最多可以修读的课程数目。
该问题实现起来不难
主要是需要理清楚题目的思路
需要一直动态地更新选择的课程
更新的标准就是
将耗时长的课程删去
补上耗时短的课程
class Solution:
def scheduleCourse(self, courses: List[List[int]]) -> int:
if not courses:return 0
n = len(courses)
pq,t = [],0
courses = sorted(courses,key = lambda x:x[1]) #将期限早的课程放在前面
for c in courses:
if t + c[0] > c[1] and pq and -pq[0] > c[0]: #判断当前选择的课程耗时是否过长
t += heapq.heappop(pq)
if t + c[0] <= c[1]:#补充新课程
heapq.heappush(pq,-c[0])
t += c[0]
return len(pq)