Skip to content

Commit a319a3f

Browse files
Add 'Meeting Rooms II'
1 parent 3765544 commit a319a3f

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ A collection of LeetCode solutions
6464

6565
[Meeting Rooms](./src/meeting_rooms.py)
6666

67+
[Meeting Rooms II](./src/meeting_rooms_ii.py)
68+
6769
[Merge Intervals](./src/merge_intervals.py)
6870

6971
[Merge k Sorted Lists](./src/merge_k_sorted_lists.py)

src/meeting_rooms_ii.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""
2+
253. Meeting Rooms II
3+
4+
https://leetcode.com/problems/meeting-rooms-ii
5+
6+
NOTES
7+
* Maintain a min-heap of meeting end times. The minimum (earliest) end time
8+
is the root node (heap invariant). If the end time of the root node is less
9+
than or equal to the start time of the current node, delete the root node
10+
from the heap. Insert the meeting end time into the heap. This is roughly
11+
equivalent to allocating/deallocating conference rooms for each meeting.
12+
The minimum number of conference rooms required is then the maximum size of
13+
the heap.
14+
15+
I really love this one–mainly due to the elegant use of a heap and because I
16+
just love heaps <3.
17+
"""
18+
19+
import heapq
20+
21+
22+
class Solution:
23+
def minMeetingRooms(self, intervals: list[list[int]]) -> int:
24+
intervals.sort(key=lambda x: x[0])
25+
heap: list[int] = []
26+
min_rooms = 0
27+
for interval in intervals:
28+
if len(heap) == 0:
29+
heapq.heappush(heap, interval[1])
30+
else:
31+
if heap[0] <= interval[0]:
32+
heapq.heappop(heap)
33+
heapq.heappush(heap, interval[1])
34+
min_rooms = max(min_rooms, len(heap))
35+
return min_rooms

tests/test_meeting_rooms_ii.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
253. Meeting Rooms II
3+
4+
https://leetcode.com/problems/meeting-rooms-ii
5+
"""
6+
7+
from unittest import TestCase
8+
9+
from src.meeting_rooms_ii import Solution
10+
11+
12+
class TestSolution(TestCase):
13+
def test_1(self):
14+
exp = 2
15+
assert Solution().minMeetingRooms([[0, 30], [5, 10], [15, 20]]) == exp
16+
17+
def test_2(self):
18+
exp = 1
19+
assert Solution().minMeetingRooms([[7, 10], [2, 4]]) == exp
20+
21+
def test_3(self):
22+
exp = 2
23+
assert Solution().minMeetingRooms([[5, 8], [6, 8]]) == exp
24+
25+
def test_4(self):
26+
exp = 2
27+
assert Solution().minMeetingRooms([[9, 10], [4, 9], [4, 17]]) == exp

0 commit comments

Comments
 (0)