【发布时间】:2018-05-07 18:56:09
【问题描述】:
我需要找到区间交叉点的最大数量,即对于 [1,6],[2,5],[5,10],[12,17],交叉点的最大数量为 5,即3.
现在这很容易做到,只需将数字标记为间隔的开始/结束并对它们进行排序(在平局优先开始数字的情况下)然后遍历排序的数组并跟踪开始和结束的数量,以及最大的区别这两者之间是最大值。
在示例中,数组为 (1 beg,2 beg,5 beg,5 end,6 end,10 end,12 beg,17 end)
在 5 处有 3 个开始和 0 个结束。
现在我的问题是我的区间是循环/周期性的,例如,如果区间包含在 [0,1] 中,则 1 等于 0(就像走完整圈并返回同一点)区间 [0.7 ,0.3] 可以想象为 [0.7,1] 和 [0,0.3] 的并集,因此它与 [0.3,0.7] 不同。
该方法失败,因为例如第一个数字可能是结束数字。
【问题讨论】:
-
为什么不将第一个数字大于第二个数字的区间分成两个区间(就像您所做的那样),然后使用修改后的区间集继续您的原始算法?
-
@Jiminion 我有一个终点和一个起点,它们会互相取消。
-
计算这种特殊间隔的数量(即开始值大于结束值),并让这个数字作为开始数量的初始值(而不是零)。现在您可以像处理算法中的任何其他间隔一样处理特殊间隔并找到正确答案。
-
@trincot 太完美了,不敢相信我没有想到这一点。随时发布我很乐意接受的答案。
-
好的,我已经发布了;-)
标签: algorithm sorting intervals