630. 课程表 III

exiaohu 于 2021-12-14 发布

题目链接:630. 课程表 III

贪心算法。按照结束时间,将课程排序。一门一门观察:

  1. 如果上了这门课,可以形成合法序列,即所有课的 diration 加起来,没有超过这门课的last_day,那就将这门课加入课程表;

  2. 如果上了这门课,无法形成合法的序列,即所有课的 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)