24 lines
1.5 KiB
Markdown
24 lines
1.5 KiB
Markdown
Leetcode #253 | #Medium | [[Куча]] | [[Интервалы]]
|
|
## Идея
|
|
Идея завести min heap, важное замечание в этой задаче - номера комнат нам не важны, важен результат
|
|
Сортируем по началу отрезка
|
|
Идем по ним, если в heap ничего нет - кладем конец отрезка, если heap не пуст, то смотрим на него, если элемент heap меньше либо равен началу отрезка, то пересечения нет, удаляем элемент хипа и добавляем конец отрезка, если есть пересечение, то просто добавляем конец отрезка. Таким образом на вершине кучи всегда будет комната которая освободиться в мин момент времени
|
|
В конце возвращаем размер кучи
|
|
## [[Big-O]]
|
|
- Время ```O(Nlog(N))```
|
|
- Память ```O(N)```
|
|
## Код
|
|
```Java
|
|
class Solution {
|
|
public int minMeetingRooms(List<Interval> intervals) {
|
|
if (intervals == null || intervals.isEmpty()) return 0;
|
|
intervals.sort((a, b) -> a.start - b.start);
|
|
PriorityQueue<Integer> heap = new PriorityQueue<>();
|
|
for (Interval i : intervals) {
|
|
if (!heap.isEmpty() && i.start >= heap.peek()) heap.poll();
|
|
heap.offer(i.end);
|
|
}
|
|
return heap.size();
|
|
}
|
|
}
|
|
``` |