算法

·

2 min read

·

- Views

记录一次业务中用到的算法: 合并区间

Copied

记录一次业务中用到的算法: 合并区间

前言

业务需要对短信下发设置禁发时间段,并且用户可以选择多个禁发时间段。 不由自主的就想到如果选择了重叠区间可以给合并一下。LC:56.合并区间

Q:

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

思路

维护一个结果数组,和两个指针,表示当前正在计算的区间的左右边界lr , 遍历区间,如果下一个区间的left 小于当前的r 说明两个区间可以合并起来 不论当前的right是多少(因为right一定大于left), 但是有可能 r > right, 也有可能 r < right, 因此 r直接取 Math.max(r, right)。 如果left 大于r , 那此时说明没有交叉,直接把[l,r] 推入到结果数组, 然后更新l,r 。遍历结束时 还需要把最终的 [l, r] 推入结果数组。

有的测试用例的区间是无序的,我一看题目竟然还真没说,所以要排个序,根据left 值来升序排序

Code