📑 题目:57. 插入区间

🚀 本题 LeetCode 传送门

题目大意

这一题是第 56 题的加强版。给出多个没有重叠的区间,然后再给一个区间,要求把如果有重叠的区间进行合并。

解题思路

可以分 3 段处理,先添加原来的区间,即在给的 newInterval 之前的区间。然后添加 newInterval ,注意这里可能需要合并多个区间。最后把原来剩下的部分添加到最终结果中即可。

代码

  1. package leetcode
  2. /**
  3. * Definition for an interval.
  4. * type Interval struct {
  5. * Start int
  6. * End int
  7. * }
  8. */
  9. func insert(intervals []Interval, newInterval Interval) []Interval {
  10. res := make([]Interval, 0)
  11. if len(intervals) == 0 {
  12. res = append(res, newInterval)
  13. return res
  14. }
  15. curIndex := 0
  16. for curIndex < len(intervals) && intervals[curIndex].End < newInterval.Start {
  17. res = append(res, intervals[curIndex])
  18. curIndex++
  19. }
  20. for curIndex < len(intervals) && intervals[curIndex].Start <= newInterval.End {
  21. newInterval = Interval{Start: min(newInterval.Start, intervals[curIndex].Start), End: max(newInterval.End, intervals[curIndex].End)}
  22. curIndex++
  23. }
  24. res = append(res, newInterval)
  25. for curIndex < len(intervals) {
  26. res = append(res, intervals[curIndex])
  27. curIndex++
  28. }
  29. return res
  30. }