先贪心截至日期 , 从小到大排序 , 截至日期越在前面,越先考虑。
分两种情况:
1.time + courses[i][0] <= courses[i][1]
直接要了;
2.time + courses[i][0] > courses[i][1]
看能不能 换一个耗费最大时间 , 让其小一点
class Solution {
public:
int scheduleCourse(vector<vector<int>>& courses) {
int n=courses.size();
//截至日期 从小到大排序
sort(courses.begin(),courses.end(),[](vector<int> a,vector<int> b){
return a[1] < b[1];
});
//大根堆
priority_queue<int> pq;
int time = 0;
for(int i=0;i<n;i++)
{
if(time + courses[i][0] <= courses[i][1])
{
time += courses[i][0];
pq.push(courses[i][0]);
}
else //time + nums[i][0] > nums[i][1]
{
//把一个最大花费时间 看一下 能不能 换成小的
if(!pq.empty() && pq.top() > courses[i][0])
{
time += courses[i][0] - pq.top();
pq.pop();
pq.push(courses[i][0]);
}
}
}
return pq.size();
}
};