如何检查整数是否在给定范围的集合中?

时间:2017-12-17 01:11:27

标签: java algorithm data-structures hashmap

假设有很多范围。例如,大小为5000的集合:

[100,200],[1,59],[3,5],[70,70]...

如何在Java中检查整数n是否有效地落入这些范围中的至少一个?

1 个答案:

答案 0 :(得分:5)

执行此操作的时间有效方法是为所有集合中的所有整数创建一个Bitset位。然后,您可以通过一次O(1)调用来测试会员资格。

问题在于,如果整数的组合范围很大,那么Bitset会占用大量内存。

第二种方法是组合重叠范围,并构造一个TreeMap<Integer, Integer>,其中键是下限,值是每个组合范围的上限。然后使用TreeMap::floorKey和测试来查找匹配的范围。此过程为O(logN),其中N是组合范围的数量。空间使用情况为O(N)