Challenge - 5 Problems
Merge Intervals Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput of merging intervals with overlapping pairs
What is the output of the following C# code that merges overlapping intervals?
DSA C#
using System; using System.Collections.Generic; public class Program { public static List<int[]> MergeIntervals(List<int[]> intervals) { intervals.Sort((a, b) => a[0].CompareTo(b[0])); List<int[]> merged = new List<int[]>(); foreach (var interval in intervals) { if (merged.Count == 0 || merged[merged.Count - 1][1] < interval[0]) { merged.Add(interval); } else { merged[merged.Count - 1][1] = Math.Max(merged[merged.Count - 1][1], interval[1]); } } return merged; } public static void Main() { var intervals = new List<int[]> { new int[] {1, 3}, new int[] {2, 6}, new int[] {8, 10}, new int[] {15, 18} }; var result = MergeIntervals(intervals); foreach (var interval in result) { Console.Write($"{interval[0]}->{interval[1]} "); } } }
Attempts:
2 left
💡 Hint
Think about how intervals that overlap are combined into one.
✗ Incorrect
The code sorts intervals by start time. It merges intervals if they overlap by updating the end time of the last merged interval. Here, [1,3] and [2,6] overlap and merge into [1,6]. Others remain separate.
❓ Predict Output
intermediateResult after merging intervals with nested overlaps
What will be printed after merging these intervals?
DSA C#
using System; using System.Collections.Generic; class Program { static List<int[]> Merge(List<int[]> intervals) { intervals.Sort((a,b) => a[0].CompareTo(b[0])); List<int[]> merged = new List<int[]>(); foreach(var interval in intervals) { if(merged.Count == 0 || merged[merged.Count-1][1] < interval[0]) { merged.Add(interval); } else { merged[merged.Count-1][1] = Math.Max(merged[merged.Count-1][1], interval[1]); } } return merged; } static void Main() { var intervals = new List<int[]> { new int[] {1, 4}, new int[] {4, 5} }; var merged = Merge(intervals); foreach(var i in merged) { Console.Write($"{i[0]}->{i[1]} "); } } }
Attempts:
2 left
💡 Hint
Check if touching intervals are merged.
✗ Incorrect
Intervals [1,4] and [4,5] touch at 4, so they merge into [1,5].
🔧 Debug
advancedIdentify the runtime error in interval merging code
What runtime error will this code produce when merging intervals?
DSA C#
using System; using System.Collections.Generic; class Program { static List<int[]> Merge(List<int[]> intervals) { intervals.Sort((a,b) => a[0].CompareTo(b[0])); List<int[]> merged = new List<int[]>(); foreach(var interval in intervals) { if(merged.Count == 0 || merged[merged.Count][1] < interval[0]) { merged.Add(interval); } else { merged[merged.Count-1][1] = Math.Max(merged[merged.Count-1][1], interval[1]); } } return merged; } static void Main() { var intervals = new List<int[]> { new int[] {1, 3}, new int[] {2, 4} }; var merged = Merge(intervals); foreach(var i in merged) { Console.Write($"{i[0]}->{i[1]} "); } } }
Attempts:
2 left
💡 Hint
Check the index used to access the last element in the list.
✗ Incorrect
The code uses merged[merged.Count] which is out of range since list indices go from 0 to Count-1.
🧠 Conceptual
advancedUnderstanding time complexity of merging intervals
What is the time complexity of merging N intervals using the standard sorting and merging approach?
Attempts:
2 left
💡 Hint
Consider the cost of sorting and then merging.
✗ Incorrect
Sorting intervals takes O(N log N). Merging them in one pass takes O(N). Overall complexity is O(N log N).
🚀 Application
expertFinal merged intervals after multiple merges
Given the following intervals, what is the final merged list printed by the code?
DSA C#
using System; using System.Collections.Generic; class Program { static List<int[]> Merge(List<int[]> intervals) { intervals.Sort((a,b) => a[0].CompareTo(b[0])); List<int[]> merged = new List<int[]>(); foreach(var interval in intervals) { if(merged.Count == 0 || merged[merged.Count-1][1] < interval[0]) { merged.Add(interval); } else { merged[merged.Count-1][1] = Math.Max(merged[merged.Count-1][1], interval[1]); } } return merged; } static void Main() { var intervals = new List<int[]> { new int[] {1, 4}, new int[] {2, 5}, new int[] {7, 9}, new int[] {8, 10}, new int[] {12, 15}, new int[] {14, 18} }; var merged = Merge(intervals); foreach(var i in merged) { Console.Write($"{i[0]}->{i[1]} "); } } }
Attempts:
2 left
💡 Hint
Merge intervals step by step, combining overlapping ones.
✗ Incorrect
Intervals [1,4] and [2,5] merge to [1,5]. Intervals [7,9] and [8,10] merge to [7,10]. Intervals [12,15] and [14,18] merge to [12,18].
