Skip to content

Instantly share code, notes, and snippets.

@Mawulijo
Last active December 5, 2020 19:40
Show Gist options
  • Save Mawulijo/8d45720b8ed3cd495f48b65e471fa8a5 to your computer and use it in GitHub Desktop.
Save Mawulijo/8d45720b8ed3cd495f48b65e471fa8a5 to your computer and use it in GitHub Desktop.
Your company built an in-house calendar tool called HiCal. You want to add a feature to see the times in a day when everyone is available. To do this, you’ll need to know when any team is having a meeting. In HiCal, a meeting is stored as an object of a Meeting class with integer variables startTime and endTime. These integers represent the numb…
package main
import (
"fmt"
"sort"
)
type Meeting struct {
StartTime int
EndTime int
}
func MergeRanges(meetings []Meeting) []Meeting {
sort.SliceStable(meetings, func(i, j int) bool {
return meetings[i].StartTime < meetings[j].StartTime
})
var sortedMeetings []Meeting
for _, m := range meetings {
sortedMeetings = append(sortedMeetings, m)
}
var mergedMeetings []Meeting
// initialize mergedMeetings with the earliest meeting
mergedMeetings = append(mergedMeetings, sortedMeetings[0])
for i := 1; i < len(sortedMeetings); i++ {
currentMeeting := sortedMeetings[i]
lastMergedMeeting := mergedMeetings[len(mergedMeetings)-1]
if currentMeeting.StartTime <= lastMergedMeeting.EndTime {
lastMergedMeeting.EndTime = Max(lastMergedMeeting.EndTime, currentMeeting.EndTime)
lastMergedMeeting.StartTime = Min(lastMergedMeeting.StartTime, currentMeeting.StartTime)
mergedMeetings[len(mergedMeetings)-1] = Meeting{
StartTime: lastMergedMeeting.StartTime,
EndTime: lastMergedMeeting.EndTime,
}
} else {
mergedMeetings = append(mergedMeetings, currentMeeting)
}
}
return mergedMeetings
}
func Max(x, y int) int {
if x > y {
return x
}
return y
}
func Min(x, y int) int {
if x < y {
return x
}
return y
}
func main() {
meetings := []Meeting{
{0, 1},
{3, 5},
{4, 8},
{10, 12},
{9, 10},
}
mergedMeetings := MergeRanges(meetings)
fmt.Println(mergedMeetings) // [{0, 1} {3, 8} {9, 12}]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment