题目
思路
两个原则,deadline小的优先;持续时间短的课程优先;具体细节:按照deadline排序,维护一个大顶堆,对截止时间早的优先入队,当入队元素无法入队时,尝试观察队顶持续时间最长的元素是否比当前元素长,如是的话,进行替换。
实现
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> queue;
int time_now = 0;
for (vector<int> index : courses) {
if (index[0] + time_now <= index[1]) {
time_now += index[0];
queue.emplace(index[0]);
}
else {
if (!queue.empty() && queue.top() > index[0]) {
time_now -= queue.top() - index[0];
queue.pop();
queue.push(index[0]);
}
}
}
return queue.size();
}
};