using System.Collections.Generic;
public Meeting(int startTime, int endTime)
public override string ToString()
return string.Format("({0}, {1})", StartTime, EndTime);
public static List<Meeting> MergeRanges(List<Meeting> meetings)
List<Meeting> mergedMeetings = new List<Meeting>();
meetings = meetings.OrderBy(x => x.StartTime).ToList();
foreach (var meeting in meetings)
if (mergedMeetings.Count() > 0)
if (meeting.StartTime <= mergedMeetings.Last().EndTime)
mergedMeetings.Last().EndTime = Math.Max(meeting.EndTime, mergedMeetings.Last().EndTime);
mergedMeetings.Add(meeting);
mergedMeetings.Add(meeting);
catch (System.SystemException ex)
public static void Main()
List<Meeting> meetings = new List<Meeting>{ new Meeting(0, 1), new Meeting(3, 5), new Meeting(4, 8), new Meeting(10, 12), new Meeting(9, 10) };
foreach(var meeting in Meeting.MergeRanges(meetings))
System.Console.WriteLine(meeting);