Skip to main content
Back to problems
#1353
Medium Algorithms

Maximum number of events that can be attended

Array Greedy Sorting Heap (Priority Queue)
38.9% acceptance
Feb 25, 2026
3976
631
You are given an array of events where events[i] = [startDayi, endDayi]. Every event i starts at startDayi and ends at endDayi. You can attend an event i at any day d where startDayi <= d <= endDayi. You can only attend one event at any time d. Return the maximum number of events you can attend.

Solution

Rust
Time O(n²)
Space O(n)
LeetCode
solution.rs
impl Solution {
  pub fn max_events(mut events: Vec<Vec<i32>>) -> i32 {
    use std::collections::BinaryHeap;
    use std::cmp::Reverse;
    events.sort_unstable();
    let mut heap: BinaryHeap<Reverse<i32>> = BinaryHeap::new();
    let mut day = 0i32;
    let mut i = 0;
    let mut count = 0;
    let max_day = *events.iter().map(|e| &e[1]).max().unwrap_or(&0);
    while day <= max_day {
      // Push all events starting on this day
      while i < events.len() && events[i][0] == day {
        heap.push(Reverse(events[i][1]));
        i += 1;
      }
      // Remove expired events
      while let Some(&Reverse(end)) = heap.peek() {
        if end < day { heap.pop(); } else { break; }
      }
      if let Some(Reverse(_)) = heap.pop() {
        count += 1;
      }
      day += 1;
      // Jump to next event start if heap empty
      if heap.is_empty() && i < events.len() {
        day = day.max(events[i][0]);
      }
    }
    count
  }
}