假设我有一个(排序的)集合,可以是一个列表、一个Map、一个Set或其他任何东西。获得一定范围内的所有值的最佳解决方案是什么?
例如,我有一个整数列表: 1,5,7,9,12,30,50,100
我想检索8 +- 5值,它将是: 5,7,9,12
我知道NavigableMap,这很有趣,但是我只能使用它检索一个元素。
对于复杂度比O(N),或者O(NLogN)更好的算法,或者我可以使用的特定集合,你有什么建议吗?
非常感谢!成本
发布于 2013-07-07 20:43:31
最接近您正在寻找的是具有following method的NavigableSet
NavigableSet<E> subSet(E fromElement,
boolean fromInclusive,
E toElement,
boolean toInclusive)
如果您有一个排序列表,那么使用两次Collections.binarySearch()
将允许您快速找到范围中第一个和最后一个元素的索引。
另外,请注意,如果您需要的是一个Map,那么NavigableMap
就有一个similar method。
发布于 2013-07-07 20:45:12
如果你有一个有序数组,你可以用二进制搜索范围的最小值,然后用二进制搜索O(log(n))中的最大值。
https://stackoverflow.com/questions/17512213
复制相似问题