我有一些在开始时间和结束时间之间写入的文件如下;
[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之间的文件
有人可以建议怎么做吗?
答案 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));
这适用于所有条件。