合并区间

14 阅读1分钟

合并区间

思路一:

区间左边元素按顺序排列,从左到右依次合并

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
}

这题递归、回溯法好像无法发挥,没什么高级的办法