#630
Hard Algorithms Course schedule iii
Array Greedy Sorting Heap (Priority Queue)
41.4% acceptance
Feb 20, 2026
3998
102
Given courses[i] = [duration, lastDay], return the maximum number of
courses you can take starting on day 1.
Solution
Rust
Time O(n log n)
Space O(n)
use std::collections::BinaryHeap;
impl Solution {
pub fn schedule_course(mut courses: Vec<Vec<i32>>) -> i32 {
// Sort by deadline
courses.sort_unstable_by_key(|c| c[1]);
let mut heap = BinaryHeap::new(); // max-heap of durations
let mut time = 0i32;
for c in &courses {
let (dur, last) = (c[0], c[1]);
time += dur;
heap.push(dur);
if time > last {
// remove the course with largest duration
time -= heap.pop().unwrap();
}
}
heap.len() as i32
}
}