以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]
golangfunc merge(intervals [][]int) [][]int {
if len(intervals) == 0 {
return intervals
}
// 1. 按区间起点排序
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
result := make([][]int, 0)
start, end := intervals[0][0], intervals[0][1]
// 2. 扫描合并
for i := 1; i < len(intervals); i++ {
curStart, curEnd := intervals[i][0], intervals[i][1]
if curStart <= end {
// 有重叠,更新 end
if curEnd > end {
end = curEnd
}
} else {
// 无重叠,保存之前的区间
result = append(result, []int{start, end})
start, end = curStart, curEnd
}
}
// 别忘了最后一个区间
result = append(result, []int{start, end})
return result
}
本文作者:曹子昂
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!