package main
import (
"fmt"
"sort"
)
func hasOverlap(intervals [][2]int) bool {
if len(intervals) == 0 {
return true
}
// Sorting is essential because once intervals are ordered by
// start time, any overlap can only occur between adjacent intervals.
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
// (5,9), (11,12), (15,17)
// (5,9) and (11,12) → 11 < 9? No
// (11,12) and (15,17) → 15 < 12? No
// The loop compares each interval with the one before it.
for i := 1; i < len(intervals); i++ {
if intervals[i][0] < intervals[i-1][1] {
return false // Overlap found
}
}
return true // No overlap
}
func main() {
intervals := [][2]int{
{11, 12},
{5, 9},
{15, 17},
}
if hasOverlap(intervals) {
fmt.Println("There are NO overlapping intervals")
} else {
fmt.Println("There ARE overlapping intervals")
}
}
/*
run:
There are NO overlapping intervals
*/