class Solution:
def scheduleCourse(self, courses: List[List[int]]) -> int:
# WA的版本,没考虑到前面就会把结束时间拉满
# courses = sorted(courses, key=lambda x:(x[1], x[0]))
# courses_sum = 0
# sum_days = 0
# for course in courses:
# sum_days += course[0]
# if course[0] > course[1]:
# continue
# if course[1] >= sum_days:
# courses_sum += 1
# return courses_sum
# 时间复杂度O(nlogn)
# AC的版本,用的是优先队列(python中heapq的小根堆)
# 按照结束的时间正序排列
courses.sort(key=lambda x: x[1])
# 创建小顶堆
q = list()
total = 0
for ti, di in courses:
# 累计课程时间小于等于规定结束之间
if total + ti <= di:
total += ti
heapq.heappush(q, -ti)
# 大于的情况就需要吧最大的max_ti移除,再加入当前的ti**这里不容易想到**
elif q and -q[0] > ti:
total -= -q[0] - ti
heapq.heappop(q)
heapq.heappush(q, -ti)
return len(q)
# 时间复杂度O(nlogn)
LeetCode 630 课程表III
最新推荐文章于 2024-07-25 11:23:22 发布