How to detect whether any intervals overlap in a list of start and end times with Go

1 Answer

0 votes
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

*/

 



answered Apr 9 by avibootz

Related questions

...