合并区间——sort.Slice

93 阅读1分钟

image.png

方法

  1. sort.Slice 进行排序,规则func为,比较切片的第一个元素,从小到大排序
  2. 排序之后将第一切片加入到ans中
  3. for range ins,遍历
  4. 拿ans尾部切片的第一个元素与遍历的下一个v比较
  5. 如果比v[0]大,那么就意味着此时的ans尾部元素可以合并下一个元素,然后取 max(ans[ll-1][1],v[1]),然后与下一个v进行比较
  6. 如果比v[0]小,那么就意味着此时的ans尾部元素已经无法合并下一个元素了,所以将v加入ans,重复4操作
func merge(ins [][]int) [][]int {
	ans := make([][]int, 0)
	sort.Slice(ins, func(i, j int) bool {
		return ins[i][0] < ins[j][0]
	})
	for _,v := range ins {
        ll := len(ans)
        if ll == 0 || ans[ll-1][1] < v[0] {
            ans = append(ans,v)
        }else {
            ans[ll-1][1] = max(ans[ll-1][1],v[1])
        }
    }
	return ans
}
func max(x int, y int) int {
	if x < y {
		return y
	}
	return x
}