我有一个java范围实现为一个分为子范围的类。实现大致如下:如何计算出没有子范围相互重叠,并且所有子范围覆盖了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, 请问您可以发布您的代码吗? 我必须执行类似的验证,我不能拿出一些东西。 在此先感谢。 – apatel 2010-10-15 19:11:06
嗨艾米特,这是我结束了: – avee 2010-10-17 14:29:51
嗨,我已经更新了我的问题,包括我的实施的一个片段,我希望它可以帮助 – avee 2010-10-17 15:12:06