题目:
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/me… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
import "sort"
func merge(intervals [][]int) [][]int {
arr := Arrs{Val:intervals}
sort.Sort(arr)
ans := make([][]int, 0)
lasIndex := 0
for i := 0 ; i < len(arr.Val); i = i + 1{
if i == 0 || ans[lasIndex][1] < arr.Val[i][0] {
ans = append(ans, arr.Val[i])
lasIndex = len(ans) - 1 // 注意更新lastIndex
} else {
ans[lasIndex] = mymerge(ans[lasIndex], arr.Val[i])
}
}
return ans
}
func mymerge(a, b []int) []int{
start := a[0]
if b[0] < start {
start = b[0]
}
end := a[1]
if end < b[1] {
end = b[1]
}
return []int{start, end}
}
type Arrs struct {
Val [][]int
}
func (a Arrs) Len() int{
return len(a.Val)
}
func (a Arrs) Swap(i, j int) {
a.Val[i], a.Val[j] = a.Val[j], a.Val[i]
}
func (a Arrs) Less(i, j int) bool {
return a.Val[i][0] < a.Val[j][0]
}