Skip to main content
Back to problems
#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)
LeetCode
solution.rs
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
  }
}