将间隔插入不相交的间隔集

时间:2013-01-22 17:33:15

标签: algorithm

给定排序的不相交集合(p,q)其中‘p’是开始时间,‘q’是结束时间。您将获得一个输入间隔。将其插入正确的位置。并返回结果排序的不相交集。

Eg: (1,4);(5,7);(8,10);(13,18)

Input interval – (3,7)
Result : (1,7);(8,10);(13,18)

Input Interval – (1,3)
Result: (1,4);(5,7);(8,10);(13,18)

Input interval – (11,12)
Result: (1,4);(5,7);(8,10);(11,12);(13,18)

Inserting an interval in a sorted list of disjoint intervals,这里没有有效的答案

1 个答案:

答案 0 :(得分:3)

您的问题和示例意味着不重叠的间隔。在这种情况下,您只需执行binary search - 无论是通过开始时间还是结束时间进行比较对于非重叠间隔都无关紧要 - 并将新间隔插入到找到的位置(如果尚未存在)。

更新

我错过了第一个例子中发生的合并。一个不好的情况是将一个较大的间隔插入一个长间隔的短间隔列表中,其中长间隔与许多短间隔重叠。为了避免对必须合并的所有区间进行线性搜索,可以执行两次二进制搜索 - 一次从左侧开始比较,一次从右侧比较结束时间。

现在判断间隔是否存在,必须插入或必须与两次搜索找到的位置之间的间隔合并是微不足道的。虽然这不是很复杂,但可能很容易off-by-one errors并需要进行一些测试。