Merge Intervals
题目描述
合并区间:
给出一组区间,请合并所有重叠的区间。
示例:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解法
解法一:排序 + 遍历
时间复杂度:
O(nlogn)
空间复杂度:
O(1)
func merge(intervals [][]int) [][]int {
sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
ans := [][]int{ intervals[0] }
for i := 1; i < len(intervals); i++ {
pre := ans[len(ans)-1]
if intervals[i][0] > pre[1] { // 如果与前一个区间无重叠部分
ans = append(ans, intervals[i])
} else if intervals[i][1] > pre[1] { // 如果大于前一个区间的结尾元素
pre[1] = intervals[i][1]
}
}
return ans
}
Last updated
Was this helpful?