我的问题是:
您将获得n个元素的数组:struct Interval {int x; int y}; 该数组的元素是开放的间隔。我必须找到T间隔(或更少),其中和是一致的最大长度间隔。
我考虑使用区间树,但不知道如何解决问题。
答案 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