如何检查整数是否在给定范围的集合中? [关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查整数是否在给定范围的集合中? [关闭]相关的知识,希望对你有一定的参考价值。
假设有一大堆范围。例如,大小为5000的集合:
[100,200],[1,59],[3,5],[70,70]...
如何在Java中检查整数n是否有效地落入这些范围中的至少一个?
答案
这样做的时间有效的方法是创建一个Bitset
,其中包含所有集合中所有整数的位集。然后,您可以使用单个O(1)
调用来测试成员资格。
问题是如果整数的组合范围很大,那么Bitset
将占用大量内存。
第二种方法是组合重叠范围,并构造一个TreeMap<Integer, Integer>
,其中键是下限,值是每个组合范围的上限。然后使用TreeMap::floorKey
和测试来找到匹配的范围。这个程序是O(logN)
,其中N
是组合范围的数量。空间使用将是O(N)
。
以上是关于如何检查整数是否在给定范围的集合中? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章