以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
package main
func merge(intervals [][]int) [][]int {
length := len(intervals)
//按照各切片的起始坐标进行排序
quickSort(intervals, 0, length-1)
//合并
for i := 1; i < length; i++ {
if intervals[i][0] >= intervals[i-1][0] && intervals[i][0] <= intervals[i-1][1] {
intervals[i][0] = intervals[i-1][0]
if intervals[i][1] <= intervals[i-1][1] {
intervals[i][1] = intervals[i-1][1]
} else {
intervals[i-1][1] = intervals[i][1]
}
}
}
// 去重
j := 1
for i := 1; i < length; i++ {
if intervals[i][0] != intervals[i-1][0] {
intervals[j] = intervals[i]
j++
} else {
if intervals[i][1] > intervals[i-1][1] {
intervals[j-1][1] = intervals[i][1]
}
}
}
intervals = intervals[0:j]
return intervals
}
func quickSort(q [][]int, l, r int) {
if l >= r {
return
}
i := l - 1
j := r + 1
mid := q[l+(r-l)/2][0]
for i < j {
for {
i++
if q[i][0] >= mid {
break
}
}
for {
j--
if q[j][0] <= mid {
break
}
}
if i < j {
q[i], q[j] = q[j], q[i]
}
}
quickSort(q, l, j)
quickSort(q, j+1, r)
}