Поиск ближайшей предыдущей и следующей даты из списка

#java #arraylist

#java #arraylist

Вопрос:

У меня есть список объектов, в котором одним из свойств является Дата. Мне нужно найти ближайшую предыдущую дату и ближайшую следующую дату, указав ссылку на определенную дату.

Какой был бы лучший способ сделать это? Если возможно, я бы хотел избежать многократного перебора списка.

Ответ №1:

Самое простое решение, которое приходит интуитивно:

  1. Возьмите текущую дату
  2. Создайте предыдущую ближайшую дату с минимально возможным значением для даты; то же самое для следующей ближайшей даты с максимально возможным значением
  3. Перебирайте массив и проверяйте: если дата меньше текущей даты и позже предыдущей ближайшей даты, переназначите предыдущую ближайшую дату; аналогичная логика применяется для следующей даты

Это позволит вам найти обе даты в одном цикле ( O(N) ).

Еще одно простое и понятное решение, но алгоритмически хуже ( O(N * log N) ):

  1. Сортировка массива
  2. Найти текущую дату
  3. Предыдущий элемент и следующий элемент, очевидно, будут ближайшими предыдущими и ближайшими следующими датами

Реализация зависит от вас.
Вернитесь, когда вы это реализуете, и расскажите нам, как у вас дела.