题意理解
给出一组课程的时长和结束时间,问如何排课,让课程最多。
问题分析
贪心
结束时间越早的课程先排,每次排都紧前排,空闲时间都让给后面。如果排完一个课程后发现课程总时长超过了最晚的结束时间,说明课程有重叠,删除掉时长最长的课程再继续排。注意这个最长时长课程可能是当前课程。
其他
第二个贪心处理不好理解。
0716:删除掉时长最长的课程可能是当前课程;排序只按照结束时间排序,不能对时长二次排序。
0801:priority_queue默认是大顶堆,如果希望是小顶堆,初始化参数增加vector<int>,greater<int>。C++的头文件选<bits/stdc++.h>。
链接
int scheduleCourse(vector<vector<int>>& courses) {
sort (courses.begin(), courses.end(), [](const vector<int>& a1, const vector<int>& a2) {
return a1[1] < a2[1];
}); //按照结束时间排序,注意,lambda中参数用的是& const,时间降低了非常多
int n = 0; //总课程数
priority_queue<int> durations; //大顶堆,保存已选课程,方便选取最大值
int now