题目:630
题意:
这里有 n 门不同的在线课程,他们按从 1 到 n 编号。每一门课程有一定的持续上课时间(课程时间)t 以及关闭时间第 d 天。一门课要持续学习 t 天直到第 d 天时要完成,你将会从第 1 天开始。
给出 n 个在线课程用 (t, d) 对表示。你的任务是找出最多可以修几门课。
题解:优先队列
代码:
class Solution {
public:
static bool cmp(vector<int>& a, vector<int>& b) {
return a[1] < b[1];
}
int scheduleCourse(vector<vector<int>>& courses) {
sort(courses.begin(), courses.end(), cmp);
priority_queue<int> q;
int sum = 0;
int t, d, temp;
for (int i = 0; i < courses.size(); ++i) {
t = courses[i][0];
d = courses[i][1];
if (sum + t <= d) { //当前总时间加上持续时间小于结束时间就入队
q.push(t);
sum += t;
}
else if (!q.empty() && q.top() > t) { //当前时间加上持续时间大于结束时间但是最大的课程持续时间大于当前课程持续时间就替换
sum += t - q.top();
q.pop();
q.push(t);
}
}
return q.size();
}
};