查找范围列表的所有子范围(一个或多个)

时间:2017-08-13 05:30:34

标签: algorithm

我有一些在开始时间和结束时间之间写入的文件如下;

[0 , 1] , [1,2] , [2 , 3] , [3, 4] , [4, 7] , [7, 8]

我想用O(N)找到2到5之间的所有子范围;
对于上面的例子:

[1,2] , [2 , 3] , [3, 4] , [4, 7]

如果我写下面的条件

,这是有效的
if (StartTime >= 2 and StartTime <= 5) or (EndTime >=2 and EndTime <= 5)
    add this to your list of sub ranges

但如果我只有一个范围,那就失败了:

[0,8] 

我正在搜索2到5之间的文件

有人可以建议怎么做吗?

2 个答案:

答案 0 :(得分:1)

请注意,如果

,则间隔A和B重叠
 (A.Start <= B.End) and (B.Start <= A.End)

示例:

 A = [2,5]
 B = [0,8]
 (A.Start <= B.End) and (B.Start <= A.End)
  (2<=8) and (0<=5)  is True, so they overlap

P.S。一般情况下,使用区间树等专用数据结构来获得更好的渐近时间是值得的。

答案 1 :(得分:0)

下面:

if(startTime<=5 && endTime>=2);

OR

if(max(startTime,2)<=min(endTime,5));

这适用于所有条件。