Challenge - 5 Problems
Merge Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateWhat is the output of merging these intervals?
Given the intervals [[1,3],[2,6],[8,10],[15,18]], what is the merged list of intervals?
DSA Typescript
function mergeIntervals(intervals: number[][]): number[][] {
if (intervals.length === 0) return [];
intervals.sort((a, b) => a[0] - b[0]);
const merged: number[][] = [];
for (const interval of intervals) {
if (merged.length === 0 || merged[merged.length - 1][1] < interval[0]) {
merged.push(interval);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
}
}
return merged;
}
console.log(mergeIntervals([[1,3],[2,6],[8,10],[15,18]]));Attempts:
2 left
💡 Hint
Sort intervals by start time and merge overlapping ones by updating the end time.
✗ Incorrect
The intervals [1,3] and [2,6] overlap, so they merge into [1,6]. The others do not overlap.
❓ Predict Output
intermediateWhat is the output after merging these intervals?
Given intervals [[1,4],[4,5]], what is the merged list of intervals?
DSA Typescript
function mergeIntervals(intervals: number[][]): number[][] {
if (intervals.length === 0) return [];
intervals.sort((a, b) => a[0] - b[0]);
const merged: number[][] = [];
for (const interval of intervals) {
if (merged.length === 0 || merged[merged.length - 1][1] < interval[0]) {
merged.push(interval);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
}
}
return merged;
}
console.log(mergeIntervals([[1,4],[4,5]]));Attempts:
2 left
💡 Hint
Intervals that touch at the boundary should be merged.
✗ Incorrect
The intervals [1,4] and [4,5] touch at 4, so they merge into [1,5].
🔧 Debug
advancedIdentify the error in this merge intervals code
What error will this code produce when merging intervals [[1,4],[2,3]]?
DSA Typescript
function mergeIntervals(intervals: number[][]): number[][] {
intervals.sort((a, b) => a[0] - b[0]);
const merged: number[][] = [];
for (const interval of intervals) {
if (merged.length === 0 || merged[merged.length - 1][1] < interval[0]) {
merged.push(interval);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
}
}
return merged;
}
console.log(mergeIntervals([[1,4],[2,3]]));Attempts:
2 left
💡 Hint
Check the condition that decides when to merge intervals.
✗ Incorrect
The condition uses <= which causes intervals that touch at the boundary not to merge properly. But here, intervals overlap so merging works fine.
🧠 Conceptual
advancedHow many intervals remain after merging [[1,5],[2,3],[4,6],[7,8]]?
After merging overlapping intervals in [[1,5],[2,3],[4,6],[7,8]], how many intervals remain?
Attempts:
2 left
💡 Hint
Merge intervals that overlap or touch.
✗ Incorrect
The first three intervals overlap and merge into [1,6]. The last interval [7,8] does not overlap. So total 2 intervals remain.
🚀 Application
expertWhat is the merged output for these intervals with nested overlaps?
Given intervals [[1,10],[2,5],[6,9],[11,15],[14,18]], what is the merged list of intervals?
DSA Typescript
function mergeIntervals(intervals: number[][]): number[][] {
intervals.sort((a, b) => a[0] - b[0]);
const merged: number[][] = [];
for (const interval of intervals) {
if (merged.length === 0 || merged[merged.length - 1][1] < interval[0]) {
merged.push(interval);
} else {
merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
}
}
return merged;
}
console.log(mergeIntervals([[1,10],[2,5],[6,9],[11,15],[14,18]]));Attempts:
2 left
💡 Hint
Nested intervals inside [1,10] merge into it; [11,15] and [14,18] merge separately.
✗ Incorrect
The intervals [2,5] and [6,9] are inside [1,10], so merged into [1,10]. Intervals [11,15] and [14,18] overlap and merge into [11,18].
