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

How can I find maximum length interval, which is sum of open intervals? c/c++

本文关键字:c++ 何找      更新时间:2023-10-16

我的问题是:

给你 n 个元素的数组:struct Interval {int x; int y}; 该数组的元素是开放间隔。我必须找到 T 区间(或更小),其总和是一致的最大长度区间。

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

按值对所有间隔边界点进行排序(按值)以及表示间隔开始和结束的键+1/-1(在键值的情况下:-1 在 +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