【发布时间】:2011-04-20 04:35:12
【问题描述】:
我在 java 中有一个范围被实现为一个分为子范围的类。实现大致如下:
public class Range
{
static public class Key implements Comparable<Key>
{
public int start;
public int end;
...
}
Key range;
SortedMap<Key, Range> subRange;
}
我想创建一个函数,确保没有子范围相互重叠,并且子范围的组合范围完全覆盖整个范围。每个范围的开始和结束可能相等。
有效对象示例:
Range: start 1, end 10
subrange 1: start 1, end 2
subrange 2: start 3, end 9
subrange 3: start 10, end 10
实现这一点的最佳方法是什么?
编辑:
致对实施感兴趣的任何人:
在我的验证代码中,我执行以下步骤:
- 将排序后的地图转换为数组
- 强制第一个和最后一个元素覆盖整个范围的开头和结尾
- 迭代数组元素并修复它们之间的间隙或重叠
第 3 步的代码:
for (int i=0; i < (rangeArray.length - 1); i++)
{
if (rangeArray[i].range.end < (rangeArray[i+1].range.start - 1) ||
rangeArray[i].range.end >= rangeArray[i+1].range.start)
{
// Alternatively, lose the if and just force subrange to behave this way
rangeArray[i].range.end = rangeArray[i+1].range.start - 1;
}
}
【问题讨论】:
-
Avee,你能发布你的代码吗?我必须执行类似的验证,但我无法想出一些东西。提前致谢。
-
嗨阿米特,这是我的结尾:
-
嗨,我已经更新了我的问题以包含我的实现的 sn-p,希望对您有所帮助