在O(n + k)时间内创建一个数据结构,可以让我在恒定时间内找到数组中某个范围内的整数个数

时间:2010-11-10 04:15:46

标签: data-structures

我有一个整数数组,我知道这些整数的值范围

我想在O(n + k)时间内创建一个数据结构,这样我就可以在恒定时间内找到数组中某个范围内的整数个数。

这可能吗,我不想对数组进行排序,这是否可以通过某种平衡树来实现? AVL树?

2 个答案:

答案 0 :(得分:1)

您可以创建另一个数组,其中值是目标数组中大于索引的值的数量。然后要查找范围内的数字,您只需找到[max] - a [min]。

要创建数组,您可以遍历目标数组,递增搜索数组索引处的值(这是O(n))。然后你反过来遍历搜索数组,使每个值都是它自身的总和以及它在数组中的所有值(O(k),如果k是数据的范围)。当然,这需要相当多的内存,具体取决于阵列的大小,但它具有您需要的性能特征。

答案 1 :(得分:0)

树操作通常是log(n)

我会有一个范围大小的数组,我预先填充'小于此值的整数数'并返回所请求范围的最小值和最大值之间的差值。这是常时。