fn merge_ranges(mut ranges: Vec<(i32, i32)>) -> Vec<(i32, i32)> {
// Sort by the start of each range
ranges.sort_by_key(|r| r.0);
let mut merged: Vec<(i32, i32)> = Vec::new();
for (start, end) in ranges {
if let Some((_, last_end)) = merged.last_mut() {
if start <= *last_end {
*last_end = (*last_end).max(end);
continue;
}
}
merged.push((start, end));
}
merged
}
fn main() {
let ranges = vec![
(302, 447),
(488, 489),
(121, 234),
(200, 421),
(140, 354),
];
println!("{:?}", merge_ranges(ranges));
}
/*
run:
[(121, 447), (488, 489)]
*/