https://leetcode.com/problems/course-schedule-iii/discuss/104845/Short-Java-code-using-PriorityQueue
1.按照截止日期排序
2.迭代,每次加上这次的时间,并且把时间加入优先队列。如果超过它的过期时间,就把队列中最大的时间去掉。
class Solution {
public:
int scheduleCourse(vector<vector<int>>& courses) {
sort(courses.begin(), courses.end(), sortHelper);
priority_queue<int> pq;
int time = 0;
for (auto& vec : courses) {
time += vec[0];
pq.push(vec[0]);
if (time > vec[1]) {
time -= pq.top();
pq.pop();
}
}
return pq.size();
}
private:
static bool sortHelper(vector<int>& v1, vector<int>& v2) {
return v1[1] < v2[1];
}
};
疑问:
1.为什么去掉最长的可以?
如果去掉的是当前这个,那么时间总量恢复到前一个,是可以的;
如果去掉的是以前的当中最长的,那么时间就把前一次迭代的时间还要少,更加可以。
2.如果我们去掉了一个,是不是意味着之前去掉的某个可以回来?
不可以。因为之前去掉的会比当前这个更大,更不可能回来。