Course Schedule III
Given courses with duration and deadline, find max number of courses you can take.
Example 1
Input: courses=[[100,200],[200,1300],[1000,1250],[2000,3200]] → Output: 3
Example 2
Input: courses=[[1,2]] → Output: 1
Solution Approach
Sort by deadline. Use a max-heap: greedily take each course; if taking it exceeds deadline, replace longest course taken so far.
- Sort courses by deadline (last day)
- Use max-heap of durations
- For each course: add it and update current time
- If current time > deadline: remove longest course from heap
- Return heap size
Java
public int scheduleCourse(int[][] courses) {
Arrays.sort(courses, (a, b) -> a[1] - b[1]);
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
int time = 0;
for (int[] c : courses) {
pq.offer(c[0]);
time += c[0];
if (time > c[1]) {
time -= pq.poll();
}
}
return pq.size();
}
- Time Complexity: O(n log n)
- Space Complexity: O(n)