Exam Room — LeetCode 855 Python Solution
- Problem
- #855
- Pattern
- Heap / Priority Queue
- Reading time
- 8 min
- Source
- leetcode.com
The problem
There is an exam room with n seats in a single row labeled from 0 to n - 1. When a student enters the room, they must sit in the seat that maximizes the distance to the closest person.
Example
- Input
- ["ExamRoom", "seat", "seat", "seat", "seat", "leave", "seat"]
- Output
- [null, 0, 9, 4, 2, null, 5]
- Explanation
- ExamRoom examRoom = new ExamRoom(10);
Python solution
class ExamRoom:
def __init__(self, n: int):
def dist(x):
l, r = x
return r - l - 1 if l == -1 or r == n else (r - l) >> 1
self.n = n
self.ts = SortedList(key=lambda x: (-dist(x), x[0]))
self.left = {}
self.right = {}
self.add((-1, n))
def seat(self) -> int:
s = self.ts[0]
p = (s[0] + s[1]) >> 1
if s[0] == -1:
p = 0
elif s[1] == self.n:
p = self.n - 1
self.delete(s)
self.add((s[0], p))
self.add((p, s[1]))
return p
def leave(self, p: int) -> None:
l, r = self.left[p], self.right[p]
self.delete((l, p))
self.delete((p, r))
self.add((l, r))
def add(self, s):
self.ts.add(s)
self.left[s[1]] = s[0]
self.right[s[0]] = s[1]
def delete(self, s):
self.ts.remove(s)
self.left.pop(s[1])
self.right.pop(s[0])
# Your ExamRoom object will be instantiated and called as such:
# obj = ExamRoom(n)
# param_1 = obj.seat()
# obj.leave(p)Complexity
| Measure | Complexity |
|---|---|
| Time | O(\log n) |
| Space | O(n) auxiliary |
Pattern: Heap / Priority Queue
Keep only the best k elements, or always pull the smallest, in log time. LeetCode 855. Exam Room is filed here on both counts: the reference solution below belongs to the algorithm family this hub collects, and LeetCode tags it Heap (Priority Queue).
The heap / priority queue guide has the Python template for the pattern and the 163 LeetCode problems that use it.
Related problems
Frequently asked questions
- How hard is LeetCode 855. Exam Room?
- LeetCode 855. Exam Room is rated Medium on LeetCode.
- What is the time complexity of LeetCode 855. Exam Room?
- The Python solution on this page runs in O(\log n).
- What is the space complexity of LeetCode 855. Exam Room?
- The Python solution on this page uses O(n) auxiliary space.
- What topics does LeetCode 855. Exam Room cover?
- LeetCode 855. Exam Room is tagged Design, Ordered Set and Heap (Priority Queue) on LeetCode.