计算落在给定范围内的间隔数

时间:2020-01-19 07:10:48

标签: algorithm tree language-agnostic range intervals

假设您有一个间隔列表,例如[(0 4),(1 3),(2 5),(2 6)]。此列表未排序。然后,您将得到一个范围,例如[1 5]。您必须返回适合范围内的时间间隔数。在此问题中,它将返回2。(((1 3)和(2 5))

间隔列表保持不变,但是最多给出100000个查询,每个查询都包含一个范围。对于每个范围查询,我们都必须返回适合其中的间隔数。

研究之后,我读到了Interval Trees。但是,您只能查询重叠具有任何给定范围的间隔,而我正在寻找 范围内的间隔。这些查询需要对数时间。

有没有办法在类似的时间复杂度下解决此问题,可能有间隔树的变化吗?我不是在寻找线性解决方案(因为蛮力总是意味着扫描所有间隔)。

1 个答案:

答案 0 :(得分:-1)

添加这样的假设:如果您要添加一个间隔,则该段不会那么长,您可以记住树节点中的id,并且您只需要记住与点 a b ,因此您只需要让段树获取id穿过a和b的向量即可。然后从另一棵树中询问段a-b中的结尾数。之后,您只需删除一次发生的ID。它应该更快。