Получить интервал, перекрывающий максимальное количество других интервалов. Java
Нужно написать программу на Java, которая выдает границы нового интервала, который перекрывает максимальное количество других интервалов. Например, для интервалов [1, 4]
, [2, 6]
, [3, 5]
, [7, 8]
, новый интервал будет [2, 4]
.
Мой код работает, но вывод неверный. Для указанного примера мой вывод [3,4], тогда как должно быть [2,4]. Подскажите пожалуйста, в чем может быть ошибка.
public static int[] findMaxOverlapInterval(List intervals) {
List<Event> events = new ArrayList<>();
for (Interval interval : intervals) {
events.add(new Event(interval.start, true));
events.add(new Event(interval.end, false));
}
Collections.sort(events);
int maxOverlaps = 0;
int currentOverlaps = 0;
int maxOverlapStart = -1;
int maxOverlapEnd = -1;
for (Event event : events) {
if (event.isStart) {
currentOverlaps++;
if (currentOverlaps > maxOverlaps) {
maxOverlaps = currentOverlaps;
maxOverlapStart = event.time;
}
} else {
if (currentOverlaps == maxOverlaps) {
maxOverlapEnd = event.time;
}
currentOverlaps--;
}
}
return new int[]{maxOverlapStart, maxOverlapEnd};
}
Ответы (1 шт):
Автор решения: talex moved to Codidact
→ Ссылка
var start = events.stream()
.filter(x -> !x.isStart)
.max(x -> x.time);
var end = events.stream()
.filter(x -> x.isStart)
.min(x -> x.time);
Результат [starrt -1, end + 1]
.