#java #arraylist
#java #arraylist
Вопрос:
У меня есть список объектов, в котором одним из свойств является Дата. Мне нужно найти ближайшую предыдущую дату и ближайшую следующую дату, указав ссылку на определенную дату.
Какой был бы лучший способ сделать это? Если возможно, я бы хотел избежать многократного перебора списка.
Ответ №1:
Самое простое решение, которое приходит интуитивно:
- Возьмите текущую дату
- Создайте предыдущую ближайшую дату с минимально возможным значением для даты; то же самое для следующей ближайшей даты с максимально возможным значением
- Перебирайте массив и проверяйте: если дата меньше текущей даты и позже предыдущей ближайшей даты, переназначите предыдущую ближайшую дату; аналогичная логика применяется для следующей даты
Это позволит вам найти обе даты в одном цикле ( O(N)
).
Еще одно простое и понятное решение, но алгоритмически хуже ( O(N * log N)
):
- Сортировка массива
- Найти текущую дату
- Предыдущий элемент и следующий элемент, очевидно, будут ближайшими предыдущими и ближайшими следующими датами
Реализация зависит от вас.
Вернитесь, когда вы это реализуете, и расскажите нам, как у вас дела.