我有一个用例,如果一个数字位于0-10之间它应该返回0,如果它位于11-20之间它应该返回1等
0 => 0-3, (0 and 3 are inclusive)
1 => 4-15, (4 and 15 are inclusive)
2 => 16-40, (16 and 40 are inclusive)
3 => 41-88, (41 and 88 are inclusive)
5 => 89-300 (89 and 300 are inclusive)
Run Code Online (Sandbox Code Playgroud)
我在想如何实现并思考java地图,但它不允许范围搜索
我对这样的事感兴趣,我有一个功能
int foo() {
}
Run Code Online (Sandbox Code Playgroud)
如果foo返回5,因为它介于0到10之间,我会使用0,如果foo返回25则会使用2.
有任何想法吗
编辑:实际上范围并不像0-10,11-20那么简单.我希望能够进行范围搜索.对此感到抱歉.根据我添加了正确示例的查询,数字是连续的
我试图找到一个数据结构,从一系列值中获取特定值并将其映射到一个键.
例如,我有以下条件:
我的值为5,我想将其映射到一个键.所以基于上述条件,我应该将它映射到B.
Java中是否有任何人可以向我推荐解决问题的数据结构?
目前我使用的哈希表只能将值映射到键.我尝试将值范围映射到哈希表中存在的特定值.但是,我陷入了将值范围映射到特定值的问题.所以现在我试图用另一种方法将值的范围映射到键.有谁知道如何解决这个问题?
编辑:
感谢Martin Ellis,我决定使用TreeMap来解决这个问题.
我有一系列时间间隔(t_start,t_end),它们不能重叠,即:t_end(i)> t_start(i + 1).我想做以下操作:
1)添加新的(联合)区间[{(1,4),(8,10)} U(3,7)= {(1,7),(8,10)}]
2)取出间隔[ (1,7) - (3,5)= {(1,3),(5,7)}
3)检查点或间隔是否与我的系列(交叉点)中的间隔重叠
4)找到第一个"在某个点[{(1,4),(7,8)}之后的最小长度的非间隔":在4和7之间存在长度为3的"非间隔".
我想知道实现这个的好方法,复杂度低(所有操作的log n都可以).
相关问题:查询快速时间间隔的数据结构
我试图找到一个有效的C++间隔树实现(很可能基于红黑树)没有病毒或限制性许可证.任何指向干净的轻量级独立实现的指针?对于我想到的用例,一开始就知道了一组区间(可能会有一百万个),我希望能够快速获得一个与给定区间重叠的区间列表.因此,一旦构建的树将不会改变 - 只需要快速查询.
我想将数据存储在通用字典中,其中的键与日期范围匹配.
例如,我提出了以下想法
public class MyKey : IEquatable<MyKey>
{
public int Key { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public override int GetHashCode()
{
returns Key;
}
// if there is overlap in date range consider them equal
public bool Equals(MyKey other)
{
if (Key!=other.Key)
return false;
else if(other.StartDate >=StartDate && other.StartDate <=EndDate)
return true;
else if(other.EndDate >=StartDate && other.EndDate <=EndDate)
return true;
else if(StartDate >=other.StartDate && StartDate <=other.EndDate)
return …Run Code Online (Sandbox Code Playgroud) algorithm ×2
dictionary ×2
java ×2
c# ×1
c++ ×1
collections ×1
intervals ×1
maps ×1
range-map ×1
tree ×1