思路:首先做距离deadline最近的,如果完成不了,则把之前包括现在这个之中时间最长的弹出去,直到保证能完成为止。
class Solution {
public:
struct course{
int deadLine;
int needTime;
};
vector <course> nums;
priority_queue<int> times;
int l;
static bool cmp(course a, course b){
if(a.deadLine == b.deadLine){
return a.needTime < b.needTime;
}
return a.deadLine < b.deadLine;
}
int scheduleCourse(vector<vector<int>>& courses) {
l = courses.size();
for(int i = 0; i < l; i++){
course temp;
temp.needTime = courses[i][0];
temp.deadLine = courses[i][1];
nums.push_back(temp);
}
sort(nums.begin(), nums.end(), cmp);
int nowTime = 0;
for(int i = 0; i < l; i++){
nowTime += nums[i].needTime;
times.push(nums[i].needTime);
while(nowTime > nums[i].deadLine && !times.empty()){
nowTime -= times.top();
times.pop();
}
}
return times.size();
}
};