fn erase_overlap_intervals(intervals: &mut Vec<(i32, i32)>) -> i32 {
intervals.sort_by_key(|k| k.1);
let mut count = 0;
let mut end = std::i32::MIN;
for interval in intervals.iter() {
if interval.0 >= end {
end = interval.1;
} else {
count += 1;
}
}
count
}
fn main() {
let mut intervals = vec![(1,3), (2,4), (3,5), (6,7)];
let result = erase_overlap_intervals(&mut intervals);
println!("{}", result);
}The code sorts intervals by their end time. It then iterates through them, counting how many intervals overlap with the previously chosen interval's end. The minimum removals needed is the count of overlapping intervals.
Choosing intervals with the earliest end time allows more intervals to fit after it without overlapping, minimizing removals.
fn erase_overlap_intervals(intervals: &mut Vec<(i32, i32)>) -> i32 {
intervals.sort_by_key(|k| k.0);
let mut count = 0;
let mut end = std::i32::MIN;
for interval in intervals.iter() {
if interval.0 >= end {
end = interval.1;
} else {
count += 1;
}
}
count
}
fn main() {
let mut intervals = vec![(1,5),(2,3),(3,4)];
let result = erase_overlap_intervals(&mut intervals);
println!("{}", result);
}The code sorts intervals by start time instead of end time, which can cause incorrect counting of overlaps and thus wrong minimum removals.
fn erase_overlap_intervals(intervals: &mut Vec<(i32, i32)>) -> i32 {
intervals.sort_by_key(|k| k.1);
let mut count = 0;
let mut end = std::i32::MIN;
for interval in intervals.iter() {
if interval.0 >= end {
end = interval.1;
} else {
count += 1;
}
}
count
}
fn main() {
let mut intervals = vec![(1,10), (2,3), (4,5), (6,7), (8,9)];
let result = erase_overlap_intervals(&mut intervals);
println!("{}", result);
}The code picks intervals with earliest end time first, which are the smaller nested intervals. The large interval (1,10) overlaps with all others, so it must be removed to avoid overlaps.
The greedy algorithm picks intervals that finish earliest, maximizing the number of intervals that can fit without overlap, thus minimizing removals.
