TreeMap(Binary Tree python) main idea: create a binary tree where each node store start and end time ,and meanwhile can track left and right neighbour. Note, left neighbour means its end time is less than current node’s start time, vise versa.
# time O(NlgN), worst N^2 space O(N)
class Node:
def __init__(self,start,end):
self.s = start
self.e = end
self.l = None
self.r = None
def insert(self,node):
if node.s >= self.e:# right insert candidate
if not self.r:
self.r = node
return True
return self.r.insert(node)
elif node.e<= self.s: # left insert candidate
if not self.l:
self.l = node
return True
return self.l.insert(node)
else:
return False
class MyCalendar:
def __init__(self):
self.root = None
def book(self, start: int, end: int) -> bool:
if not self.root:
self.root = Node(start,end)
return True
return self.root.insert(Node(start,end))
# Your MyCalendar object will be instantiated and called as such:
# obj = MyCalendar()
# param_1 = obj.book(start,end)