题目:
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
算法:
这个题目边界条件很多,难怪ac率只有40%
func merge(intervals [][]int) [][]int {
sort.Sort(array(intervals))
ans := make([][]int, 0)
start, end := intervals[0][0], intervals[0][1]
for i := 1; i < len(intervals); i ++ {
if max(intervals[i - 1][1], end) < intervals[i][0] {
ans = append(ans, []int{start, end})
start = intervals[i][0]
end = intervals[i][1]
}
end = max(intervals[i][1], end)
}
ans = append(ans, []int{start, end})
return ans
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
type array [][]int
func (a array) Len() int{
return len(a)
}
func (a array) Less(i, j int) bool{
return a[i][0] < a[j][0]
}
func (a array) Swap(i, j int) {
a[i], a[j] = a[j], a[i]
}