#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)
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
}
}