题目链接:630. 课程表 III
贪心算法。按照结束时间,将课程排序。一门一门观察:
-
如果上了这门课,可以形成合法序列,即所有课的
diration加起来,没有超过这门课的last_day,那就将这门课加入课程表; -
如果上了这门课,无法形成合法的序列,即所有课的
diration加起来,超过了这门课的last_day。那就先将这门课加入课程表,然后从课程表中取duration最长的课程,将其从课程表去掉。
import heapq
from typing import List
class Solution:
def scheduleCourse(self, courses: List[List[int]]) -> int:
attended, attended_days = list(), 0
for duration, lastday in sorted(courses, key=lambda item: (item[1], item[0])):
heapq.heappush(attended, -duration)
attended_days += duration
if attended_days > lastday:
attended_days += heapq.heappop(attended)
return len(attended)