Пересечение ареалов - простая, но нетривиальная задача.
Его уже ответили уже дважды:
Первые решения - это O (n), а второе решение для базы данных (что меньше, чем O (n), конечно).
У меня та же проблема, но для большого n и я не в базе данных.
Эта проблема, похоже, очень похожа на Хранить 2D-точки для быстрого поиска внутри прямоугольника, но я не вижу, как она отображается.
Итак, какую структуру данных вы бы сохранили набор диапазонов, так что поиск по диапазону стоил бы меньше O (n)? (Дополнительный кредит за использование библиотек для Java)
EDIT:
Я хочу получить подмножество всех пересекающихся диапазонов, то есть диапазон поиска может пересекать несколько диапазонов.
Метод, который должен быть меньше O (n) в Java, это:
public class RangeSet {
....
public Set<Range> intersects(Range range);
....
}
Где Range - это просто класс, содержащий пару int start и end.
Это вопрос невозможен, у меня уже есть решение, я просто хотел посмотреть, есть ли более стандартный/более простой способ сделать это.