假设我有一个(已排序的)集合,可以是List,Map,Set或其他任何东西.什么是使所有值在一定范围内的最佳解决方案.
例如,我有一个整数列表,如下所示:[1,5,7,9,12,30,50,100]
我想检索8 + - 5值,这将是:[5,7,9,12]
我知道NavigableMap非常有趣,但我只能使用它检索一个元素.
您是否有关于比O(N)更复杂的算法的任何提示,可能是O(NLogN)或我可以使用的特定集合?
非常感谢!COSTI
最接近你要找的是a NavigableSet,它有以下方法:
NavigableSet<E> subSet(E fromElement,
boolean fromInclusive,
E toElement,
boolean toInclusive)
Run Code Online (Sandbox Code Playgroud)
如果您有一个排序列表,那么使用Collections.binarySearch()两次将允许您快速找到该范围中第一个和最后一个元素的索引.
另外,请注意,如果您需要的是Map,NavigableMap则有类似的方法.