'''
这里有 n 门不同的在线课程,按从 1 到 n 编号。
给你一个数组 courses ,其中 courses[i] = [durationi, lastDayi]
表示第 i 门课将会持续上 durationi 天课,并且必须在不晚于 lastDayi 的时候完成。
你的学期从第 1 天开始。且不能同时修读两门及两门以上的课程。
返回你最多可以修读的课程数目。
'''
from typing import List
class Solution:
def scheduleCourse(self, courses: List[List[int]]) -> int:
if not courses:
return 0
# 按照结束时间排序
courses.sort(key=lambda x: x[1])
# 用一个数组记录每门课的结束时间
end_time = []
# 用一个变量记录当前的时间
cur_time = 0
for duration, last_day in courses:
# 如果上课时间大于等于结束时间,则这门课一定无法完成,跳过
if duration <= last_day:
# 如果当前时间加上这门课的时间小于等于这门课的结束时间
if cur_time + duration <= last_day:
end_time.append(duration)
# 当前时间加上这门课的时间
cur_time += duration
# 如果当前时间加上这门课的时间大于这门课的结束时间
else:
# 找到数组中持续时间最长的课程
max_duration = max(end_time)
# 如果这门课的持续时间比数组中持续时间最长的课程短
if duration < max_duration:
# 将数组中持续时间最长的课程替换为这门课
end_time[end_time.index(max_duration)] = duration
# 当前时间减去数组中持续时间最长的课程的时间
cur_time -= max_duration
# 当前时间加上这门课的时间
cur_time += duration
return len(end_time)
LeetCode刷题日记(630. 课程表 III)
最新推荐文章于 2024-10-04 20:45:38 发布