题目
思路 贪心+优先队列
优先选择时间紧,时间短的课程。维护一个优先队列,将课程按持续时间倒序排序。先对课程按时间顺序升序排序,每次循环放入结束时间最早的课程,如果当前结束时间超了,就把持续时间最长的pop出来。
代码
class Solution {
public:
int scheduleCourse(vector<vector<int>>& courses) {
//将课程按结束时间升序排序
sort(courses.begin(),courses.end(),[](const vector<int> &a,const vector<int> &b){return a[1]<b[1];});
priority_queue<int,vector<int>,less<int>> q; //存储持续时间长度
int sum=0;
for(auto course:courses){
int d=course[0],e=course[1];
sum+=d;
q.push(d);
//如果当前结束时间超了,就把优先队列里面持续时间最长的的pop出来
if(sum>e){
sum-=q.top();
q.pop();
}
}
return q.size();
}
};