**Solution**

**Meeting Rooms II** https://leetcode.com/problems/meeting-rooms-ii/

- Use an event based simulation method. There are two events: start and end of a meeting.
- Use a heap to drive the event based simulation.
- Add all events to a min-heap. Then extract the minimum event. For start of a meeting, increment curr_room count by 1. For end of meeting, reduce curr_room count by 1. At each iteration, update the maximum running count for curr_rooms.
- Time complexity: O(N * lg (N)). Space complexity: O(N).

```
from heapq import heappush, heappop
class Solution(object):
def minMeetingRooms(self, intervals):
"""
:type intervals: List[Interval]
:rtype: int
"""
heap = []
for interval in intervals:
heappush(heap, (interval.start, "s"))
heappush(heap, (interval.end, "e"))
min_conference_rooms, curr_rooms = 0, 0
while heap:
tm, ev_id = heappop(heap)
curr_rooms = curr_rooms + 1 if ev_id == "s" else curr_rooms - 1
min_conference_rooms = max(min_conference_rooms, curr_rooms)
return min_conference_rooms
```