У меня есть диапазон в 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
Каков наилучший способ реализации этого?
РЕДАКТИРОВАТЬ:
Для всех, кто заинтересован в реализации:
В своем коде проверки я делаю эти шаги:
- Преобразование отсортированной карты в массив
- Forceпервый и последний элемент, охватывающий начало и конец общего диапазона
- Перебор элементов массива и исправление пробелов или перекрытие между ними
Код для шага 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;
}
}