【发布时间】:2013-09-28 08:01:23
【问题描述】:
假设,我有一个未排序的范围数组。 例如
class CreditRange{
long credits;
int id;
}
现在我要查找,给定的信用计数值属于哪个 CreditRange。
可能Set<CreditRange>的值可以是
CreditRange :{id:1,credits:0}
CreditRange :{id:2,credits:100}
CreditRange :{id:3,credits:500}
CreditRange :{id:4,credits:250}
案例 1:现在当用户输入 Credits = 50 时,这个范围比较器应该给出 回答为
CreditRange :{id:1,credits:0}
案例 2:现在当用户输入 Credits = 300 时,这个范围比较器应该给出 回答为
CreditRange :{id:4,credits:250}
案例 3:现在当用户输入 Credits = 600 时,这个范围比较器应该给出 回答为
CreditRange :{id:3,credits:500}
我们可以假设范围数组需要大约 1M 并且适合内存。我正在寻找一种简单的算法,它只使用标准 JDK 集合,没有任何 3d 方库和特殊数据结构,但运行速度相当快。
你有什么建议?
【问题讨论】:
-
是数组还是集合?
-
你有没有尝试过?
-
这是一组 CreditRange
-
我根本看不出
CreditRange实际上是一个范围。它只有一个界限。如果您希望它是一个真实的范围,您需要它同时具有上限和下限。如果要保留当前结构,则应将其重命名为CreditBound,确保将其作为 有序 集合(可能不是集合),然后使用二进制印章。
标签: java collections