Leetcode 885 Solution
This article provides solution to leetcode question 885 (exam-room)
Access this page by simply typing in "lcs 885" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/exam-room
Solution
class Node(object):
def __init__(self, pos, next):
self.pos = pos
self.next = next
class ExamRoom(object):
def __init__(self, N):
"""
:type N: int
"""
self.head = Node(None, None)
self.N = N
def seat(self):
"""
:rtype: int
"""
if self.head.next is None:
self.head.next = Node(0, None)
return 0
node = self.head.next
left_dist = node.pos
right_dist = sys.maxint
best_dist = 0
best_node = None
while node:
if node.next:
if best_dist < (node.next.pos - node.pos) / 2:
best_dist = (node.next.pos - node.pos) / 2
best_node = node
node = node.next
else:
right_dist = self.N - 1 - node.pos
break
if left_dist >= best_dist and left_dist >= right_dist:
self.head.next = Node(0, self.head.next)
return 0
elif best_dist > left_dist and best_dist >= right_dist:
best_node.next = Node(best_node.pos + best_dist, best_node.next)
return best_node.pos + best_dist
else:
node.next = Node(self.N - 1, None)
return self.N - 1
def leave(self, p):
"""
:type p: int
:rtype: None
"""
prev = self.head
node = self.head.next
while node:
if node.pos == p:
prev.next = node.next
break
prev = node
node = node.next
# Your ExamRoom object will be instantiated and called as such:
# obj = ExamRoom(N)
# param_1 = obj.seat()
# obj.leave(p)