Challenge - 5 Problems
Interval Insertion Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput of inserting an interval that merges with one existing interval
What is the output list of intervals after inserting [4, 8] into the sorted list [[1, 3], [6, 9]]?
DSA Rust
fn insert_interval(intervals: Vec<[i32; 2]>, new_interval: [i32; 2]) -> Vec<[i32; 2]> { let mut result = Vec::new(); let mut i = 0; let n = intervals.len(); let mut new_start = new_interval[0]; let mut new_end = new_interval[1]; while i < n && intervals[i][1] < new_start { result.push(intervals[i]); i += 1; } while i < n && intervals[i][0] <= new_end { new_start = new_start.min(intervals[i][0]); new_end = new_end.max(intervals[i][1]); i += 1; } result.push([new_start, new_end]); while i < n { result.push(intervals[i]); i += 1; } result } fn main() { let intervals = vec![[1, 3], [6, 9]]; let new_interval = [4, 8]; let result = insert_interval(intervals, new_interval); print!("{:?}", result); }
Attempts:
2 left
💡 Hint
Think about how overlapping intervals merge into one.
✗ Incorrect
The new interval [4, 8] overlaps with [6, 9], so they merge into [4, 9]. The first interval [1, 3] does not overlap and stays as is.
❓ Predict Output
intermediateOutput after inserting an interval that does not overlap
What is the output list of intervals after inserting [10, 11] into the sorted list [[1, 2], [3, 5], [6, 7]]?
DSA Rust
fn insert_interval(intervals: Vec<[i32; 2]>, new_interval: [i32; 2]) -> Vec<[i32; 2]> { let mut result = Vec::new(); let mut i = 0; let n = intervals.len(); let mut new_start = new_interval[0]; let mut new_end = new_interval[1]; while i < n && intervals[i][1] < new_start { result.push(intervals[i]); i += 1; } while i < n && intervals[i][0] <= new_end { new_start = new_start.min(intervals[i][0]); new_end = new_end.max(intervals[i][1]); i += 1; } result.push([new_start, new_end]); while i < n { result.push(intervals[i]); i += 1; } result } fn main() { let intervals = vec![[1, 2], [3, 5], [6, 7]]; let new_interval = [10, 11]; let result = insert_interval(intervals, new_interval); print!("{:?}", result); }
Attempts:
2 left
💡 Hint
The new interval does not overlap and should be added at the end.
✗ Incorrect
Since [10, 11] does not overlap with any existing intervals, it is simply appended at the end.
🔧 Debug
advancedIdentify the error in interval insertion code
What error does the following Rust code produce when inserting [2, 5] into [[1, 3], [6, 9]]?
fn insert_interval(intervals: Vec<[i32; 2]>, new_interval: [i32; 2]) -> Vec<[i32; 2]> {
let mut result = Vec::new();
let mut i = 0;
let n = intervals.len();
let mut new_start = new_interval[0];
let mut new_end = new_interval[1];
while i < n && intervals[i][1] <= new_start {
result.push(intervals[i]);
i += 1;
}
while i < n && intervals[i][0] < new_end {
new_start = new_start.min(intervals[i][0]);
new_end = new_end.max(intervals[i][1]);
i += 1;
}
result.push([new_start, new_end]);
while i < n {
result.push(intervals[i]);
i += 1;
}
result
}
Attempts:
2 left
💡 Hint
Check the comparison operators in the while loops carefully.
✗ Incorrect
The conditions in the while loops are swapped. Using '<=' and '<' causes incorrect merging behavior.
🧠 Conceptual
advancedNumber of intervals after inserting a fully overlapping interval
Given a sorted list of intervals [[1, 2], [3, 5], [6, 7], [8, 10], [12, 16]], what is the number of intervals after inserting [4, 9]?
Attempts:
2 left
💡 Hint
The new interval overlaps with multiple existing intervals and merges them.
✗ Incorrect
The new interval [4, 9] overlaps with [3, 5], [6, 7], and [8, 10], merging them into one interval. The final list has 3 intervals.
🚀 Application
expertFinal intervals after multiple insertions
Starting with an empty list, insert intervals in this order: [5, 7], [1, 3], [2, 6], [10, 12]. What is the final list of intervals?
Attempts:
2 left
💡 Hint
Merge intervals as you insert if they overlap.
✗ Incorrect
Inserting [5,7] then [1,3] gives [[1,3],[5,7]]. Inserting [2,6] merges [1,3],[2,6],[5,7] into [1,7]. Finally, [10,12] is separate.
