fn merge_intervals(mut intervals: Vec<(i32, i32)>) -> Vec<(i32, i32)> {
if intervals.is_empty() {
return vec![];
}
intervals.sort_by_key(|k| k.0);
let mut merged = vec![intervals[0]];
for current in intervals.into_iter().skip(1) {
let last = merged.last_mut().unwrap();
if current.0 <= last.1 {
last.1 = last.1.max(current.1);
} else {
merged.push(current);
}
}
merged
}
fn main() {
let intervals = vec![(1, 4), (2, 5), (7, 9), (8, 10)];
let result = merge_intervals(intervals);
println!("{:?}", result);
}The code sorts intervals by their start value. Then it merges intervals that overlap by extending the end of the last merged interval.
Intervals (1,4) and (2,5) overlap and merge into (1,5). Intervals (7,9) and (8,10) overlap and merge into (7,10).
fn merge_intervals(mut intervals: Vec<(i32, i32)>) -> Vec<(i32, i32)> {
if intervals.is_empty() {
return vec![];
}
intervals.sort_by_key(|k| k.0);
let mut merged = vec![intervals[0]];
for current in intervals.into_iter().skip(1) {
let last = merged.last_mut().unwrap();
if current.0 <= last.1 {
last.1 = last.1.max(current.1);
} else {
merged.push(current);
}
}
merged
}
fn main() {
let intervals = vec![(1, 2), (3, 4), (5, 6)];
let result = merge_intervals(intervals);
println!("{:?}", result);
}Since none of the intervals overlap, the merged list is the same as the sorted input intervals.
fn merge_intervals(mut intervals: Vec<(i32, i32)>) -> Vec<(i32, i32)> {
intervals.sort_by_key(|k| k.0);
let mut merged = vec![];
for current in intervals {
if merged.is_empty() || current.0 > merged.last().unwrap().1 {
merged.push(current);
} else {
merged.last_mut().unwrap().1 = current.1.max(merged.last().unwrap().1);
}
}
merged
}
fn main() {
let intervals = vec![(1, 3), (2, 6), (8, 10)];
let result = merge_intervals(intervals);
println!("{:?}", result);
}The code incorrectly updates the start of the last merged interval instead of the end. This causes wrong merging results.
All smaller intervals are inside (1, 10), so after merging, only one interval remains.
Intervals (8,8) and (8,10) merge into (8,10). Intervals (15,18) and (17,17) overlap so they merge into (15,18). The first two intervals merge into (1,6).
