相关疑难解决方法(0)

使用java map进行范围搜索

我有一个用例,如果一个数字位于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那么简单.我希望能够进行范围搜索.对此感到抱歉.根据我添加了正确示例的查询,数字是连续的

java maps

37
推荐指数
2
解决办法
3万
查看次数

可以将一系列键映射到值的数据结构

我试图找到一个数据结构,从一系列值中获取特定值并将其映射到一个键.

例如,我有以下条件:

  1. 从1到2.9,我想将它映射到A.
  2. 从4到6,我想将它映射到B.
  3. 从6.5到10,我想将它映射到C.

我的值为5,我想将其映射到一个键.所以基于上述条件,我应该将它映射到B.

Java中是否有任何人可以向我推荐解决问题的数据结构?

目前我使用的哈希表只能将值映射到键.我尝试将值范围映射到哈希表中存在的特定值.但是,我陷入了将值范围映射到特定值的问题.所以现在我试图用另一种方法将值的范围映射到键.有谁知道如何解决这个问题?

编辑:

感谢Martin Ellis,我决定使用TreeMap来解决这个问题.

java dictionary data-structures range-map

18
推荐指数
2
解决办法
1万
查看次数

处理间隔的数据结构

我有一系列时间间隔(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都可以).

相关问题:查询快速时间间隔的数据结构

algorithm tree intervals data-structures

12
推荐指数
2
解决办法
8269
查看次数

查找C++区间树算法实现

我试图找到一个有效的C++间隔树实现(很可能基于红黑树)没有病毒或限制性许可证.任何指向干净的轻量级独立实现的指针?对于我想到的用例,一开始就知道了一组区间(可能会有一百万个),我希望能够快速获得一个与给定区间重叠的区间列表.因此,一旦构建的树将不会改变 - 只需要快速查询.

c++ algorithm interval-tree red-black-tree

8
推荐指数
2
解决办法
1万
查看次数

匹配日期范围的字典键

我想将数据存储在通用字典中,其中的键与日期范围匹配.

例如,我提出了以下想法

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)

c# collections dictionary

3
推荐指数
1
解决办法
3736
查看次数