Challenge - 5 Problems
Interval Insertion Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput after 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 C#
List<int[]> intervals = new List<int[]> { new int[] {1, 3}, new int[] {6, 9} }; int[] newInterval = new int[] {4, 8}; var result = InsertInterval(intervals, newInterval); foreach(var interval in result) { Console.Write($"[{interval[0]}, {interval[1]}] "); } List<int[]> InsertInterval(List<int[]> intervals, int[] newInterval) { List<int[]> result = new List<int[]>(); int i = 0; while (i < intervals.Count && intervals[i][1] < newInterval[0]) { result.Add(intervals[i]); i++; } while (i < intervals.Count && intervals[i][0] <= newInterval[1]) { newInterval[0] = Math.Min(newInterval[0], intervals[i][0]); newInterval[1] = Math.Max(newInterval[1], intervals[i][1]); i++; } result.Add(newInterval); while (i < intervals.Count) { result.Add(intervals[i]); i++; } return 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 separate.
❓ Predict Output
intermediateOutput after inserting an interval that does not overlap any existing intervals
What is the output list of intervals after inserting [10, 12] into the sorted list [[1, 5], [6, 9]]?
DSA C#
List<int[]> intervals = new List<int[]> { new int[] {1, 5}, new int[] {6, 9} }; int[] newInterval = new int[] {10, 12}; var result = InsertInterval(intervals, newInterval); foreach(var interval in result) { Console.Write($"[{interval[0]}, {interval[1]}] "); } List<int[]> InsertInterval(List<int[]> intervals, int[] newInterval) { List<int[]> result = new List<int[]>(); int i = 0; while (i < intervals.Count && intervals[i][1] < newInterval[0]) { result.Add(intervals[i]); i++; } while (i < intervals.Count && intervals[i][0] <= newInterval[1]) { newInterval[0] = Math.Min(newInterval[0], intervals[i][0]); newInterval[1] = Math.Max(newInterval[1], intervals[i][1]); i++; } result.Add(newInterval); while (i < intervals.Count) { result.Add(intervals[i]); i++; } return result; }
Attempts:
2 left
💡 Hint
New interval is after all existing intervals, so it should be added at the end.
✗ Incorrect
Since [10,12] does not overlap and is after all intervals, it is simply appended.
🔧 Debug
advancedIdentify the error in interval insertion code
What error will this code produce when inserting [2, 5] into [[1, 3], [6, 9]]?
List intervals = new List { new int[] {1, 3}, new int[] {6, 9} };
int[] newInterval = new int[] {2, 5};
var result = InsertInterval(intervals, newInterval);
List InsertInterval(List intervals, int[] newInterval) {
List result = new List();
int i = 0;
while (i < intervals.Count && intervals[i][1] <= newInterval[0]) {
result.Add(intervals[i]);
i++;
}
while (i < intervals.Count && intervals[i][0] < newInterval[1]) {
newInterval[0] = Math.Min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.Max(newInterval[1], intervals[i][1]);
i++;
}
result.Add(newInterval);
while (i < intervals.Count) {
result.Add(intervals[i]);
i++;
}
return result;
}
Attempts:
2 left
💡 Hint
Check the loop conditions carefully for merging intervals.
✗ Incorrect
The conditions use <= and < incorrectly, causing partial merges and incorrect output.
❓ Predict Output
advancedOutput after inserting an interval that merges multiple existing intervals
What is the output list of intervals after inserting [2, 7] into the sorted list [[1, 3], [4, 6], [8, 10]]?
DSA C#
List<int[]> intervals = new List<int[]> { new int[] {1, 3}, new int[] {4, 6}, new int[] {8, 10} }; int[] newInterval = new int[] {2, 7}; var result = InsertInterval(intervals, newInterval); foreach(var interval in result) { Console.Write($"[{interval[0]}, {interval[1]}] "); } List<int[]> InsertInterval(List<int[]> intervals, int[] newInterval) { List<int[]> result = new List<int[]>(); int i = 0; while (i < intervals.Count && intervals[i][1] < newInterval[0]) { result.Add(intervals[i]); i++; } while (i < intervals.Count && intervals[i][0] <= newInterval[1]) { newInterval[0] = Math.Min(newInterval[0], intervals[i][0]); newInterval[1] = Math.Max(newInterval[1], intervals[i][1]); i++; } result.Add(newInterval); while (i < intervals.Count) { result.Add(intervals[i]); i++; } return result; }
Attempts:
2 left
💡 Hint
The new interval overlaps with two intervals, so they merge into one.
✗ Incorrect
Intervals [1,3] and [4,6] overlap with [2,7], merging into [1,7]. The last interval stays separate.
🧠 Conceptual
expertMinimum number of intervals after inserting and merging
Given a sorted list of non-overlapping intervals and a new interval to insert, what is the minimum number of intervals possible after insertion and merging?
Attempts:
2 left
💡 Hint
Consider if the new interval overlaps with none, one, or multiple intervals.
✗ Incorrect
Inserting a new interval can add one new interval if no overlaps occur, or merge multiple intervals reducing count. So the maximum is original count plus one.
