leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

my_calendar.py (1563B)


# 729. My Calendar I

"""
you are implementing a program to use as your calendar. we can add a new
event if adding the event will not cause a double booking. a double booking
happens when two events have some non empty intersection (ie. some moment is
common to both events.). the event can be represented as a pair of integers
'start' and 'end' that represent a booking on the half open interval '[start,
end)', the range of real numbers 'x' such that 'start <= x < end'.
"""


class Node:
    def __init__(self, s, e):
        self.e = e
        self.s = s
        self.left = None
        self.right = None


class MyCalendar(object):
    def __init__(self):
        self.root = None

    def book_helper(self, s, e, node):
        if s >= node.e:
            if node.right:
                return self.book_helper(s, e, node.right)
            else:
                node.right = Node(s, e)
                return True
        elif e <= node.s:
            if node.left:
                return self.book_helper(s, e, node.left)
            else:
                node.left = Node(s, e)
                return True
        else:
            return False

    def book(self, start, end):
        """
        :type start: int
        :type end: int
        :rtype: bool
        """
        if not self.root:
            self.root = Node(start, end)
            return True
        return self.book_helper(start, end, self.root)


if __name__ == "__main__":
    obj = MyCalendar()
    print(obj.book(10, 20))
    print(obj.book(15, 25))
    print(obj.book(20, 30))