58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package day19
|
|
|
|
import (
|
|
"sort"
|
|
)
|
|
|
|
func merge(intervals [][]int) [][]int {
|
|
const start, end = 0, 1
|
|
|
|
var merged [][]int
|
|
|
|
if len(intervals) > 1 {
|
|
sort.Slice(intervals, func(i, j int) bool {
|
|
return intervals[i][start] < intervals[j][start]
|
|
})
|
|
}
|
|
|
|
for _, interval := range intervals {
|
|
last := len(merged) - 1
|
|
if last < 0 || interval[start] > merged[last][end] {
|
|
merged = append(merged,
|
|
[]int{start: interval[start], end: interval[end]},
|
|
)
|
|
} else if interval[end] > merged[last][end] {
|
|
merged[last][end] = interval[end]
|
|
}
|
|
}
|
|
|
|
return merged[:len(merged):len(merged)]
|
|
}
|
|
|
|
func applyLessThan(intervals [][]int, n int) [][]int {
|
|
var lessers [][]int
|
|
for _, interval := range intervals {
|
|
from := interval[0]
|
|
if from >= n {
|
|
continue
|
|
}
|
|
lessers = append(lessers, []int{from, n-1})
|
|
}
|
|
|
|
return lessers
|
|
}
|
|
|
|
func applyMoreThan(intervals [][]int, n int) [][]int {
|
|
var greaters [][]int
|
|
for _, interval := range intervals {
|
|
to := interval[1]
|
|
if to <= n {
|
|
continue
|
|
}
|
|
greaters = append(greaters, []int{n+1, to})
|
|
}
|
|
// log.Printf(">>>> in applyMoreThan %d to %+v ; result %+v", n, intervals, greaters)
|
|
|
|
return greaters
|
|
}
|