给出一个区间的集合,请合并所有重叠的区间。
示例 1:
1 | 输入: [[1,3],[2,6],[8,10],[15,18]] |
示例 2:
1 | 输入: [[1,4],[4,5]] |
思路:
- 怎么判断重叠: 两区间的最小的右边界 大于或等于 两区间最大的左边界. 如
[1,5]
和[2,8]
- 入参是切片的切片(intervals), 拿
intervals[0]
与它后面的所有区间对比, 从intervals[1]
开始, 如果有与之重叠的区间, 就把合并后的新区间赋给intervals[0]
, 并删除参与合并的那个旧区间 intervals[0]
完成后, 拿``intervals[1]与它后边的所有区间对比, 从
intervals[2]开始, 如果有与之重叠的区间, 就把合并后的新区间赋给
intervals[1]`, 并删除参与合并的那个就区间- 拿
intervals[i]
与它后边的所有区间对比, 从intervals[i+1]
开始, 如果有与之重叠的区间intervals[j] , 就把合并后的新区间赋给intervals[i]
, 并删除参与合并的intervals[j] - 如果第3步出现了有重叠的区间
intervals[j]
, 那么合并后i
的值变了, 就有可能由原来 在i
到j
之间没有重叠的区间 变成 有重叠的区间, 所以需要从头(i+1
) 再遍历一次, 直到再也没有重叠的区间 - 重复, 一直到切片末尾
code
1 | func min(x, y int) int { |