给出一个区间的集合,请合并所有重叠的区间。
示例 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 { |