package main
import (
"fmt"
"sort"
)
type Range [2]int
func mergeRanges(ranges []Range) []Range {
// Sort by start value
sort.Slice(ranges, func(i, j int) bool {
return ranges[i][0] < ranges[j][0]
})
var merged []Range
for _, r := range ranges {
start, end := r[0], r[1]
if len(merged) == 0 || start > merged[len(merged)-1][1] {
merged = append(merged, Range{start, end})
} else {
last := &merged[len(merged)-1]
if end > last[1] {
last[1] = end
}
}
}
return merged
}
func main() {
ranges := []Range{
{302, 447},
{488, 489},
{121, 234},
{200, 421},
{140, 354},
}
fmt.Println(mergeRanges(ranges))
}
/*
run:
[[121 447] [488 489]]
*/