📖 Scenario: You are working on a calendar app that manages meeting times. Sometimes, meetings overlap and you want to combine those overlapping meetings into one longer meeting to avoid confusion.
🎯 Goal: Build a program that takes a list of meeting time intervals and merges all overlapping intervals into one, so the calendar shows clear, non-overlapping meeting times.
📋 What You'll Learn
Create a vector of tuples representing meeting intervals with exact values
Create a variable to hold the merged intervals
Sort the intervals by their start time
Merge overlapping intervals using a loop
Print the merged intervals in the format [(start1, end1), (start2, end2), ...]
💡 Why This Matters
🌍 Real World
Merging overlapping intervals is useful in calendar apps, booking systems, and resource scheduling to avoid conflicts.
💼 Career
Understanding interval merging helps in software roles involving scheduling, data processing, and algorithm design.
Progress0 / 4 steps
1
Create the initial list of meeting intervals
Create a vector called intervals with these exact tuples: (1, 3), (2, 6), (8, 10), (15, 18)
DSA Rust
Hint
Use let mut intervals = vec![(1, 3), (2, 6), (8, 10), (15, 18)]; to create the vector.
2
Create a vector to hold merged intervals
Create an empty vector called merged to store the merged intervals
DSA Rust
Hint
Use let mut merged: Vec<(i32, i32)> = Vec::new(); to create an empty vector.
3
Sort and merge overlapping intervals
Sort intervals by the start time using intervals.sort_by_key(|k| k.0). Then use a for loop with variable interval to iterate over intervals. Inside the loop, merge overlapping intervals by comparing with the last interval in merged and update or push accordingly.
DSA Rust
Hint
Sort first, then loop through intervals. Use merged.last_mut() to get the last merged interval and update or push new intervals.
4
Print the merged intervals
Print the merged vector using println!("{:?}", merged) to show the merged intervals
DSA Rust
Hint
Use println!("{:?}", merged); to print the vector of tuples.
Practice
(1/5)
1. What is the main goal when merging overlapping intervals in a list like [[1,3],[2,6],[8,10]]?
easy
A. Remove all intervals that overlap
B. Sort intervals by their end values only
C. Combine intervals that overlap into one continuous interval
D. Split intervals into smaller parts
Solution
Step 1: Understand overlapping intervals
Intervals overlap if one starts before the other ends. For example, [1,3] and [2,6] overlap.
Step 2: Merge overlapping intervals
We combine overlapping intervals into one that covers both, like merging [1,3] and [2,6] into [1,6].
Final Answer:
Combine intervals that overlap into one continuous interval -> Option C
Quick Check:
Merging overlapping intervals means combining them [OK]
Hint: Merge intervals by combining overlapping ranges [OK]
Common Mistakes:
Sorting only by end values misses correct merges
Removing intervals instead of merging
Splitting intervals unnecessarily
2. Which Rust code snippet correctly sorts a vector of intervals by their start value before merging?
easy
A. intervals.sort_by_key(|interval| interval[0]);
B. intervals.sort();
C. intervals.sort_by(|a, b| b[0].cmp(&a[0]));
D. intervals.sort_by_key(|interval| interval[1]);
Solution
Step 1: Identify sorting by start value
We want to sort intervals by their first element (start), so we use sort_by_key with interval[0].
Step 2: Check sorting direction and key
intervals.sort_by_key(|interval| interval[0]); sorts ascending by start, which is correct. intervals.sort_by(|a, b| b[0].cmp(&a[0])); sorts descending, which is wrong. intervals.sort_by_key(|interval| interval[1]); sorts by end, not start.
Final Answer:
intervals.sort_by_key(|interval| interval[0]); -> Option A
Quick Check:
Sort by start value using sort_by_key(interval[0]) [OK]
Hint: Use sort_by_key with interval[0] to sort by start [OK]
Common Mistakes:
Sorting by end instead of start
Sorting descending instead of ascending
Using sort() without key for nested vectors
3. What is the output of this Rust code that merges overlapping intervals?
let mut intervals = vec![vec![1,4], vec![2,5], vec![7,9]];
intervals.sort_by_key(|x| x[0]);
let mut merged = vec![];
for interval in intervals {
if merged.is_empty() || merged.last().unwrap()[1] < interval[0] {
merged.push(interval);
} else {
let last = merged.last_mut().unwrap();
last[1] = last[1].max(interval[1]);
}
}
println!("{:?}", merged);
[1,4] and [2,5] overlap, merged to [1,5]. [7,9] does not overlap, so added as is.
Final Answer:
[[1,5], [7,9]] -> Option D
Quick Check:
Merged intervals = [[1,5], [7,9]] [OK]
Hint: Merge intervals by extending end if overlapping [OK]
Common Mistakes:
Not merging overlapping intervals
Merging non-overlapping intervals
Incorrectly updating interval ends
4. Identify the bug in this Rust code for merging intervals:
let mut intervals = vec![vec![1,3], vec![2,4], vec![5,7]];
intervals.sort_by_key(|x| x[1]);
let mut merged = vec![];
for interval in intervals {
if merged.is_empty() || merged.last().unwrap()[1] < interval[0] {
merged.push(interval);
} else {
let last = merged.last_mut().unwrap();
last[1] = last[1].max(interval[1]);
}
}
println!("{:?}", merged);
medium
A. Sorting by end value causes incorrect merging
B. Using last_mut() causes a runtime error
C. The vector intervals is not mutable
D. The condition to check overlap is reversed
Solution
Step 1: Check sorting key
The code sorts intervals by their end value, but merging requires sorting by start value to process intervals in order.
Step 2: Effect of wrong sorting
Sorting by end causes intervals to be processed out of order, leading to missed merges or incorrect merges.
Final Answer:
Sorting by end value causes incorrect merging -> Option A
Quick Check:
Sort by start, not end, for correct merging [OK]
Hint: Always sort intervals by start before merging [OK]
Common Mistakes:
Sorting by end instead of start
Misusing mutable references
Incorrect overlap condition
5. Given a list of intervals [[1,3],[2,4],[5,7],[6,8],[9,10]], write a Rust function to merge all overlapping intervals and return the merged list. What is the correct merged output?