假设我有一个(已排序的)集合,可以是List,Map,Set或其他任何东西。将所有值保持在一定范围内的最佳解决方案是什么。
例如我有一个整数列表,如:[1,5,7,9,12,30,50,100]
我想检索8 + - 5值,这将是:[5,7,9,12]
我知道NavigableMap非常有趣,但是我只能使用它检索一个元素。
对于比O(N)更复杂的算法,可能是O(NLogN)还是我可以使用的特定集合,您有什么提示吗?
非常感谢! COSTI
答案 0 :(得分:8)
最接近您要找的是NavigableSet
,其中包含following method:
NavigableSet<E> subSet(E fromElement,
boolean fromInclusive,
E toElement,
boolean toInclusive)
如果您有一个排序列表,那么使用Collections.binarySearch()
两次将允许您快速找到该范围中第一个和最后一个元素的索引。
另请注意,如果您需要的是地图,则NavigableMap
会有similar method。
答案 1 :(得分:0)
如果你有一个排序数组,你可以二进制搜索范围的最小值,然后二进制搜索范围的最大值O(log(n))。