先將區間按照 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
}}