【问题标题】:Count the number of intervals that fall in the given range计算落在给定范围内的区间数
【发布时间】:2020-05-05 13:21:27
【问题描述】:

假设您有一个区间列表,例如 [(0 4), (1 3), (2 5), (2 6)]。此列表未排序。然后给你一个范围,例如 [1 5]。您必须返回适合范围内的间隔数。在这个问题中,它会返回 2. ((1 3) and (2 5))

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

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

有没有办法以相似的时间复杂度解决这个问题,可能是区间树的变体?我不是在寻找线性解决方案(因为蛮力无论如何都意味着扫描所有间隔)。

【问题讨论】:

  • 您是否对同一个区间列表进行了多次查询?
  • 是的,最多 10^5。
  • 如果您同时获得所有查询,则很容易。不然挺难的。你在问题中遗漏了很多细节,所以....
  • 是的,您同时收到查询 - 我会将其添加到我的帖子中。
  • 如果您需要任何其他详细信息,我会添加它:)

标签: algorithm tree language-agnostic range intervals


【解决方案1】:

如果您要添加一个区间,则假设该段不会那么长,您可以记住树节点中的 id,并且您只需记住段交叉点 a 和>b,所以你只需要询问段树来获取 id 穿过 a 和 b 的向量。并且从不同的树中,您将询问片段 a-b 中的结尾数。之后,您只需删除发生一次的 id 即可。它应该更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多