I am trying to merge some overlapping "meeting" intervals.
Given intervals:
[{0, 1}, {3, 5}, {4, 8}, {10, 12}, {9, 10}]
Merged intervals:
[{0, 1}, {3, 8}, {9, 12}]
My first approach is a double for loop. However, my output comes out to be:
[{3, 8}, {9, 12}]
Which is omitting {0, 1} in my final result.
Code:
type Meeting struct {
startTime int
endTime int
}
func MergeIntervals(meetings []Meeting) []Meeting {
var mergedMeetings []Meeting
for i := 0; i < len(meetings); i++ {
for j := i + 1; j < len(meetings); j++ {
var first Meeting
var second Meeting
// the meeting with the earlier start time is the "first" meeting
if meetings[i].startTime < meetings[j].startTime {
first = meetings[i]
second = meetings[j]
} else {
first = meetings[j]
second = meetings[i]
}
if first.endTime >= second.startTime {
mergedMeetings = append(mergedMeetings, Meeting{first.startTime, second.endTime})
}
}
}
return mergedMeetings
}