using System.Collections.Generic;
public int Start { get; set; }
public int End { get; set; }
static IEnumerable<Interval> MergeOverlappingIntervals(IEnumerable<Interval> intervals)
var accumulator = intervals.First();
intervals = intervals.Skip(1);
foreach (var interval in intervals)
if (interval.Start == accumulator.End)
accumulator = new Interval
Start = accumulator.Start,
yield return accumulator;
yield return accumulator;
public static void Main()
new Interval { Start = 100, End = 200 },
new Interval { Start = 200, End = 300 },
new Interval { Start = 400, End = 500 },
new Interval { Start = 500, End = 800 },
new Interval { Start = 900, End = 1100 },
new Interval { Start = 1300, End = 1500 },
var orderedIntervals = input.OrderBy(x => x.Start).ToList();
var mergeResult = MergeOverlappingIntervals(orderedIntervals);
foreach(var item in mergeResult) Console.WriteLine($" Start = {item.Start}, End = {item.End} ");