如何找到最大长度间隔,即开放间隔的总和? C / C ++

时间:2018-04-29 14:31:17

标签: c++ arrays algorithm tree intervals

我的问题是:

您将获得n个元素的数组:struct Interval {int x; int y}; 该数组的元素是开放的间隔。我必须找到T间隔(或更少),其中和是一致的最大长度间隔。

我考虑使用区间树,但不知道如何解决问题。

1 个答案:

答案 0 :(得分:0)

按值排序(按值)所有区间边界点与值+1/-1一起表示间隔的开始和结束(如果键值为tie,则在+1之前为开放区间)

制作ActiveCount = 0
遍历排序列表,按键值递增ActiveCount

ActiveCount变为非零时,间隔联合开始,当它变为零时 - 间隔联合结束。找到最长的起点差异。

对于你的例子(部分):

(0;3), (1;4), (5;7), (2;3)
make pairs 
(0, 1), (3,-1), (1, 1), (4, -1), (5,1), (7,-1), (2,1), (3,-1)
sorted 
(0, 1), (1, 1), (2,1), (3,-1), (3,-1), (4, -1), (5,1), (7,-1)
ActiveCount
 1       2       3     2        1       0        1     0
 ^                                      ^
 start                                  end
相关问题