先将区间按照 start 进行排序
遍历每个区间, 开始向后遍历 是否区间满足合并的条件
初始
left := intervals[i][0]
right := intervals[i][1]
从j = i + 1开始
判断后面j区间的开始intervals[j][0]是否<=right 是 则可以合并 切新区间的left=left right = max(right, intervals[j][1])
实现
type MergeSlice [][]intfunc(s MergeSlice)Len()int{returnlen(s)}func(s MergeSlice)Swap(i, j int){ s[i], s[j]= s[j], s[i]}func(s MergeSlice)Less(i, j int)bool{return s[i][0]< s[j][0]}funcmerge(intervals [][]int)[][]int{
sort.Sort(MergeSlice(intervals))
retList :=make([][]int,0)
size :=len(intervals)var i intfor i < size {
left := intervals[i][0]
right := intervals[i][1]
j := i +1for j < size {if intervals[j][0]<= right {
right =Max(intervals[j][1], right)
j++}else{break}}
ret :=[]int{left, right}
retList =append(retList, ret)
i = j // 合并之后i=j+1 没有合并i=i+1 都可以用i=j表示}return retList
}funcMax(a, b int)int{if a >= b {return a
}else{return b
}}