56. 合并区间

image.png

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. func merge(intervals [][]int) [][]int {
  7. if len(intervals)==0 {
  8. return nil
  9. }
  10. sort.Slice(intervals, func(i, j int) bool {
  11. return intervals[i][0]<intervals[j][0]
  12. })
  13. queue :=[][]int{intervals[0]}
  14. for i:=1;i<len(intervals);i++{
  15. top :=queue[len(queue)-1]
  16. curr :=intervals[i]
  17. if curr[0]>top[1] {//当前值首地址大于栈顶的尾部元素
  18. queue = append(queue,curr)
  19. continue
  20. }
  21. //{a,b}{c,d} b>c
  22. if curr[1]>top[1] {
  23. top[1]=curr[1]// 合并区间
  24. }
  25. }
  26. return queue
  27. }
  28. func main() {
  29. fmt.Println(merge([][]int{{1,3},{2,4},{8,10},{15,18}}))
  30. fmt.Println(merge([][]int{{1,4},{4,5}}))
  31. }

image.png