56.合并区间

47 阅读1分钟

题目:
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
算法:

这个题目边界条件很多,难怪ac率只有40%

func merge(intervals [][]int) [][]int {
	sort.Sort(array(intervals))
	ans := make([][]int, 0)
	start, end := intervals[0][0], intervals[0][1]
	for i := 1; i < len(intervals); i ++ {
		if max(intervals[i - 1][1], end) < intervals[i][0] {
			ans = append(ans, []int{start, end})
			start = intervals[i][0]
			end = intervals[i][1]
		}
		end = max(intervals[i][1], end)
	}
	ans = append(ans, []int{start, end})
	return ans
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

type array [][]int
func (a array) Len() int{
	return len(a)
}
func (a array) Less(i, j int) bool{
	return a[i][0] < a[j][0]
}
func (a array) Swap(i, j int) {
	a[i], a[j] = a[j], a[i]
}