1、题目
2、题解
思路多少有点不太顺,不顺的原因居然是我把排序给忘了🤦?♂?
(1)对所有的区间按照起始元素从小到大进行排序
(2)判断两个区间能否合并:前一区间的 end 大于后一区间的 start(前提是各区间已经完成(1)中的排序)
代码实现如下
func merge(intervals [][]int) [][]int {
res:=[][]int{}
l:=len(intervals)
if l==0 {
return res
}
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0] })
start, end:=intervals[0][0], intervals[0][1]
for i:=1; i<l; i++ {
if intervals[i][0]<=end{
start=Smaller(intervals[i][0], start)
end=Bigger(intervals[i][1], end)
}else{
res=append(res, []int{start, end})
start=intervals[i][0]
end=intervals[i][1]
}
}
res=append(res, []int{start, end})
return res
}
func Bigger(a, b int) int{
if a>=b{
return a
}else{
return b
}
}
func Smaller(a, b int) int{
if a<=b{
return a
}else{
return b
}
}
|