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

C++ 如何找到最大长度间隔,即开放间隔的总和?c/c++;,c++,arrays,algorithm,tree,intervals,C++,Arrays,Algorithm,Tree,Intervals,我的问题是: 您将获得n个元素的数组:结构区间{intx;inty}; 该数组的元素是开放间隔。我必须找到T区间(或更小),其和是一致的最大长度区间 我考虑过使用区间树,但不知道如何解决这个问题。按值排序(按值)所有区间边界点,连同表示区间开始和结束的键+1/-1一起排序(如果键值为-1,开放区间为-1) 使ActiveCount=0 遍历排序列表,按键值递增ActiveCount 当ActiveCount变为非零时,间隔并集开始,当它变为零时-间隔并集结束。查找最长的结束-开始差异 对于您的示

我的问题是:

您将获得n个元素的数组:结构区间{intx;inty}; 该数组的元素是开放间隔。我必须找到T区间(或更小),其和是一致的最大长度区间

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

按值排序(按值)所有区间边界点,连同表示区间开始和结束的键
+1/-1
一起排序(如果键值为-1,开放区间为-1)

使
ActiveCount=0

遍历排序列表,按键值递增
ActiveCount

ActiveCount
变为非零时,间隔并集开始,当它变为零时-间隔并集结束。查找最长的结束-开始差异

对于您的示例(部分):


欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。也请和。最后,请学习如何创建一个。你也可以发布一个示例输入和输出与你的文章,如果可能的话,问题链接。很遗憾,原始内容不是英文的。例如:区间:(0;3)、(1;4)、(5;7)、(2;3)、(9,11)、(6,8),区间的最长和为(0;4)。输出间隔对我来说不是最重要的,我想找到最大的间隔。Ohk基本上你把重叠的间隔组合起来,一旦你计算出哪个间隔的长度最大,这也可以不用间隔树来解决,你对一个可行的解决方案满意吗?我认为可以使用堆栈和按第一个坐标排序数组来完成?这将是nlogn复杂性,但我不知道如何在线性时间内做到这一点(如果可能的话),我不明白。“按值与键+-1一起排序”是什么意思?你的意思是排序间隔(0;3)、(1;4)、(5;7)、(2;3)、(9,11)、(6,8):0,1,2,3,4,5,6,7,8,9,11?请看示例对不起,我没有看到。非常感谢。
(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