合并区间——排序

26 阅读1分钟

image.png

步骤

  1. 排序,按照第一个元素从大到小排序
  2. a, b 储存一个区间,如果 v[0] <= b 则 再判断 v[1] > b ,如果再次满足条件,则更新 a, b 所表示的区间
  3. 如果 v[0] <= b 条件不满足,则说明当前区间已经覆盖完全,无需更新,将这个区间计入 ans
  4. 当然,最后记得将最后一个 a, b 区间导入 ans
func merge(intervals [][]int) [][]int {
    sort.Slice(intervals, func(i, j int) bool {
        return intervals[i][0] < intervals[j][0] 
    })
    ans := [][]int{}
    a, b := intervals[0][0], intervals[0][1]
    for _, v := range intervals {
        if v[0] <= b {
            if v[1] > b {
                b = v[1]
            }
        }else {
            ans = append(ans, []int{a, b})
            a, b = v[0], v[1]
        }
    }
    ans = append(ans, []int{a, b})
    return ans
}