【发布时间】:2016-10-03 15:42:37
【问题描述】:
假设这对值是:5 和 10
还有
范围数组 R 是: R = {(6,10), (5,7), (6,9), (4,12)}
在这种情况下,它应该返回 True,因为 5 和 10 都位于 4 和 12 之间。
O(N) 中显然有一个非常简单的解决方案,通过迭代每一对,可以通过基于 R 中值对的第一个值对范围 R 进行排序来进一步改进(尽管我猜排序会使最坏情况 O(n log n))。但是,问题是当我需要找到多对值的答案时。我正在寻找更好的解决方案,可能以某种方式使用map,以减少重新计算某些值的需要。基本上,有没有使用动态规划的方法?
有什么想法吗?代码也会受到赞赏:P
【问题讨论】:
-
您可能对段树感兴趣。
-
问题不够清楚。请举一个更具体的例子。您是否希望该对的两个元素都在一个特定范围内?该对是否代表一个范围?对于范围 (1,4),(7,9),对 (3,8) 的结果是什么?为什么?
-
我觉得够清楚了吧?这应该返回 false,因为没有 3 和 8 都位于的范围。 @A.
-
好吧,在这种情况下,如果范围数组已经给出并且这是一次性任务,那么只需执行遍历数组并检查每个范围的蛮力。如果你想要一些数据结构,那么你可能想要使用段树(某种 BST)。
标签: c++ algorithm dictionary dynamic-programming