题目:
思路:
对课程截止时间进行排序,维护一个时间来表示当前所消耗的时间。每次超出时间时,将最长时间的课程给取消。
步骤如下:
- 定义一个时间nowTime表示当前课程所需要的时间。
- 对原有课程表按照课程结束时间排序。
- 定义一个优先队列,将课程所需时间最长的放在前面。
- 当当前时间超过课程总时间时,将课程所需最长时间退栈。
代码如下:
class Solution {
public int scheduleCourse(int[][] courses) {
Arrays.sort(courses,(a,b)->{
if(a[1]==b[1]) return a[0]-b[0];
return a[1]-b[1];
});
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>((a,b)->b-a);
int nowTime = 0;
for(int[] c:courses){
int duration = c[0];
int lastday = c[1];
nowTime += duration;
priorityQueue.add(duration);
if(nowTime>lastday) nowTime-=priorityQueue.poll();
}
return priorityQueue.size();
}
}