【发布时间】:2012-09-09 21:56:58
【问题描述】:
假设我有 N 个 [start,end] 形式的区间。我需要确定这些间隔是否覆盖了整个范围。
例如:如果我的间隔是 [4.5,5.765] 和 [5.8,10] 并且间隔是 [5,10] 它应该报告错误,而对于相同的数据如果间隔是 [6,9.99] 它应该报告真实。
我需要 1e-9 的精度。间隔和范围将在 [-1000,1000] 内。
这个问题可以在 O(NlgN) 时间内解决吗?其中 N = 间隔数。
【问题讨论】:
-
间隔是否预先排序?你关心空间限制吗?
-
没有。间隔没有预先排序。但它保证间隔将在 range[-1000,1000] 范围内。抱歉,现在我已经更新了。而且我有 256 Mb 的空间。但我认为这并不重要。您是否正在考虑存储每个值。嗯!!
-
所以理论上你可以创建一个 [-1000 * 1e9, 1000*1e9] 的 BitSet 并随时屏蔽这些位。这在区间数上是线性的,但取决于总范围和每个区间的范围。不幸的是,这会占用相当多的空间......
-
我认为如果我有整数值或者精度会低得多,则使用位掩码会更合适。这会占用很多空间。有没有更好的算法。我听说过区间树,但是我不确定它是否可以完成这项任务。
-
你可以假设 N