
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();
}
本文介绍了一种基于优先级队列的课程安排算法,通过按截止时间和课程时长排序,实现最优课程选择。算法使用大顶堆进行课程时长管理,确保在有限时间内完成最多课程。
342

被折叠的 条评论
为什么被折叠?



