leetcode 630. 课程表 III【贪心+堆排序(优先队列)】

leetcode 630. 课程表 III【贪心+堆排序(优先队列)】_第1张图片

思路:
先按结束时间从小到大排序。逐个添加新课程,如果添加新课程后的结束时间大于等于新课程的结束时间,用新课程替换已选课程中持续时间最长且大于新课程的持续时间的课程。如果添加新课程后的结束时间小于新课程的结束时间,说明新课程可以直接选。

code:

class Solution:
    def scheduleCourse(self, courses: List[List[int]]) -> int:
        """先按结束时间从小到大排序。逐个添加新课程,如果添加新课程后的结束时间大于等于新课程的结束时间,用新课程替换已选课程中持续时间最长且大于新课程的持续时间的课程。如果添加新课程后的结束时间小于新课程的结束时间,说明新课程可以直接选。"""
        courses.sort(key=lambda item:item[1])
        total, hpq = 0, []
        for duration, lastday in courses:
            total += duration
            if total > lastday:
                total += heappushpop(hpq, -duration)
            else:
                heappush(hpq, -duration)
        return len(hpq)

你可能感兴趣的:(贪心,leetcode,贪心算法,算法)