2026-07-090

合并区间

题目

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

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]

具体实现

golang
func merge(intervals [][]int) [][]int { if len(intervals) == 0 { return intervals } // 1. 按区间起点排序 sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] }) result := make([][]int, 0) start, end := intervals[0][0], intervals[0][1] // 2. 扫描合并 for i := 1; i < len(intervals); i++ { curStart, curEnd := intervals[i][0], intervals[i][1] if curStart <= end { // 有重叠,更新 end if curEnd > end { end = curEnd } } else { // 无重叠,保存之前的区间 result = append(result, []int{start, end}) start, end = curStart, curEnd } } // 别忘了最后一个区间 result = append(result, []int{start, end}) return result }

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!