【发布时间】:2020-06-20 23:51:27
【问题描述】:
你是一个给定的连续间隔数组,即{ [a,b],[b,c],[c,d],...,[g,h],[h,i] }
给定一个n m k类型的查询,我们需要输出包含k的n,m (inclusive, 1-based indexing)之间的间隔数。
我的方法:(天真地检查n,m 之间的所有间隔并保留一个计数器。)
如果m-n 和查询的数量很小,这将有效,但对于较大的n,m 值和多个查询,这将是非常低效的。
所以我正在考虑一种动态编程方法,这样我们可以将包含 z 的区间数保存到数组 x 中编号为 x 的区间内,然后我可以将任何查询 n m k 回答为 @ 987654332@。但是,如果数组中给定的间隔太大,这也会失败,因为构造 dp 数组需要更多时间。
我该如何解决这个问题,或者我是否缺少更简单的方法?
任何提示都会有所帮助。
例子:
数组:{ [1,3],[3,2],[2,1],[1,5],[5,3] }
查询:{ 1 2 2 },{ 1 3 3 },{ 2 2 4 }
输出:{ 2 },{ 2 },{ 0 }
【问题讨论】:
-
请添加一些输入示例和您的问题的预期输出。
-
你能解释一下这种天真的方法有什么问题吗?对我来说它是 O(N) 并且不依赖于间隔的长度。我错了吗?
-
@Sarmon:问题是如何针对多个查询进行优化。
标签: algorithm data-structures hashtable