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 into a sorted list
What is the output of the following code after inserting the interval [4, 8] into the sorted list of intervals?
DSA Javascript
function insertInterval(intervals, newInterval) {
const result = [];
let i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
while (i < intervals.length && 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.push(newInterval);
while (i < intervals.length) {
result.push(intervals[i]);
i++;
}
return result;
}
const intervals = [[1, 3], [6, 7], [9, 12]];
const newInterval = [4, 8];
console.log(insertInterval(intervals, newInterval));Attempts:
2 left
💡 Hint
Think about merging overlapping intervals after inserting the new one.
✗ Incorrect
The new interval [4,8] overlaps with [6,7], so they merge into [4,8]. The final list is [[1,3],[4,8],[9,12]].
❓ Predict Output
intermediateResult after inserting a non-overlapping interval at the start
What is the output after inserting the interval [0, 0] into the sorted list [[1, 2], [3, 5], [6, 7]]?
DSA Javascript
function insertInterval(intervals, newInterval) {
const result = [];
let i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
while (i < intervals.length && 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.push(newInterval);
while (i < intervals.length) {
result.push(intervals[i]);
i++;
}
return result;
}
const intervals = [[1, 2], [3, 5], [6, 7]];
const newInterval = [0, 0];
console.log(insertInterval(intervals, newInterval));Attempts:
2 left
💡 Hint
The new interval does not overlap and is before all existing intervals.
✗ Incorrect
Since [0,0] is before all intervals and does not overlap, it is simply inserted at the start.
🔧 Debug
advancedIdentify the error in interval insertion code
What error will the following code produce when inserting [5, 10] into [[1, 4], [6, 8]]?
DSA Javascript
function insertInterval(intervals, newInterval) {
const result = [];
let i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
while (i < intervals.length && 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.push(newInterval);
while (i < intervals.length) {
result.push(intervals[i]);
i++;
}
return result;
}
const intervals = [[1, 4], [6, 8]];
const newInterval = [5, 10];
console.log(insertInterval(intervals, newInterval));Attempts:
2 left
💡 Hint
Check the conditions in the while loops carefully.
✗ Incorrect
The condition uses <= and < incorrectly, causing the second interval to be merged properly and not duplicated.
🧠 Conceptual
advancedUnderstanding interval merging logic
Why does the insertion algorithm merge intervals that overlap with the new interval instead of just inserting it?
Attempts:
2 left
💡 Hint
Think about the properties of the interval list after insertion.
✗ Incorrect
Merging overlapping intervals keeps the list sorted and ensures no intervals overlap, which is the goal.
🚀 Application
expertFinal intervals after multiple insertions
Given an initially empty list, what is the final list after inserting intervals in this order: [1,3], [2,6], [8,10], [15,18]?
DSA Javascript
function insertInterval(intervals, newInterval) {
const result = [];
let i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
while (i < intervals.length && 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.push(newInterval);
while (i < intervals.length) {
result.push(intervals[i]);
i++;
}
return result;
}
let intervals = [];
intervals = insertInterval(intervals, [1,3]);
intervals = insertInterval(intervals, [2,6]);
intervals = insertInterval(intervals, [8,10]);
intervals = insertInterval(intervals, [15,18]);
console.log(intervals);Attempts:
2 left
💡 Hint
Merge intervals that overlap after each insertion.
✗ Incorrect
The first two intervals merge into [1,6]. The others do not overlap, so final list is [[1,6],[8,10],[15,18]].
