Контекст: у меня есть класс с двумя полями, одно из которых представляет собой целое число, представляющее дату (для этой конкретной проблемы оно должно быть целым числом). . У меня также есть метод, который выполняет двоичный поиск в массиве целых чисел с временной сложностью O(Log(N)).
Мне нужно создать метод, который получает две даты (начальную и конечную) и список объектов указанного класса. Список может быть ArrayList или LinkedList. Цель состоит в том, чтобы узнать, сколько объектов этого класса существует в списке в желаемом диапазоне дат (минимум 0 и максимум 2, заданных по определению), используя метод двоичного поиска.
Этот метод должен иметь временную сложность O(Log(N)), но я не могу понять, как его решить. Все мои решения оставляют мне временную сложность O(N) или даже хуже. Я оставлю метод ниже.
Я думал, что мне нужно передать значения даты в массив за постоянное время, но я даже не знаю, достижимо ли это.
Код: Выделить всё
public static int countEvents(int initialDate, int endDate, List list) {
int n = list.size(), i = 0;
int[] dates = new int[n];
for (Event event : list) {
dates[i] = event.getDate();
i++;
}
int InitialPos = binarySearch(dates, initialDate);
int EndPos = binarySearch(dates, endDate + 1);
return EndPos - InitialPos;
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... his-method