给定一个未排序的整数数组和 2 个数字 i 和 j 使得 0 <= i <= j <= C(一个常量说 MAX_INTEGER) 可以对其执行什么样的预处理,以便您能够找到数字在 o(1) 时间内 i 和 j(包括两者)之间的数字。该数组也可以有重复项。
我曾想过为数组(空间o(C))中的元素构建一个频率数组f [],并为累积频率(空间o(C))构建另一个数组cf []。
所以给定 i 和 j,我可以查找累积频率数组并执行 cf[j] - cf[i] - 这将给出 i 和 j 之间的元素数。要包括 i 和 j,请查找频率数组并添加值。即 cf[j] - cf[i] + f[i]+f[j] 时间复杂度将为 o(1) * 4 = 常数时间。
通过在相应方向上为 i 和 j 找到先前的非零 cf 数组元素,可以避免在频率数组中查找。这会增加时间复杂度,但会降低空间复杂度。
想知道这个问题是否有更好的解决方案。
注意 - i 和 j 的值只有在预处理完成后才可供您使用。
-维杰