У меня есть диапазон в 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;
}
}