合并区间
思路一:
区间左边元素按顺序排列,从左到右依次合并
func merge(intervals [][]int) [][]int {
if len(intervals) == 1 {
return intervals
}
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
var result [][]int
curVal := intervals[0]
for i := 1; i < len(intervals); i++ {
if curVal[1] < intervals[i][0] {
result = append(result, curVal)
//更新curVal为下一组
curVal = intervals[i]
continue
}
//合并,注意这里区间右侧要取最大值
curVal = []int{curVal[0], max(curVal[1], intervals[i][1])}
}
//注意,最后要把curVal加入
result = append(result, curVal)
return result
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
这题递归、回溯法好像无法发挥,没什么高级的办法