int scheduleCourse(vector<vector<int>>& courses) {
//按照截止时间排序,截止时间相同的,时间短的排前面
sort(courses.begin(),courses.end(),[](vector<int> &a, vector<int> &b){
if(a[1]==b[1])
return a[0]<b[0];
return a[1]<b[1];
});
int time = 0;
priority_queue<int> q;//大顶堆
for(int i=0;i<courses.size();++i){
//顺利情况
if(time+courses[i][0]<=courses[i][1]){
time+=courses[i][0];
q.push(courses[i][0]);
//替换成更短的课程
}else if(!q.empty() && q.top()>courses[i][0]){
time = time - q.top() + courses[i][0];
q.pop();
q.push(courses[i][0]);
}
}
return q.size();
}