【发布时间】:2013-01-07 15:56:18
【问题描述】:
我想到了一个问题,如下:
我们有一个大小为 n 的整数数组 A,我们有测试用例 t,在每个测试用例中,我们都有一个数字 m 和一个范围 [s,e],即我们有 s 和 e,我们必须在该数组(A[s]-A[e])的范围内找到最接近的 m 数。
你可以假设数组索引是从 1 到 n。
例如:
A = {5, 12, 9, 18, 19}
m = 13
s = 4 and e = 5
所以答案应该是 18。
约束:
n<=10^5
t<=n
我能想到的只是每个测试用例的 O(n) 解决方案,我认为存在更好的解决方案。
【问题讨论】:
-
如果它没有以任何方式排序,那么你必须访问 A[s] 和 A[e] 之间的每个值,所以它是 O(n)。或者更确切地说是 O(e-s),我想。
-
@femtoRgon 我知道,但是通过使用任何数据结构我认为这是可能的(只是想但不确定)。
-
既然您指定了最大尺寸界限 (10^5),那么复杂度不是 O(1) - 即恒定时间吗?
-
@Chris 这是对不超过其值的元素数量的限制
-
@izomorphius 如果数字应该是无限精度整数,那么到目前为止给出的复杂度数字是错误的。
标签: algorithm complexity-theory