You are implementing a program to use as your calendar. We can add a new event if adding the event will not cause a triple booking.
A triple booking happens when three events have some non-empty intersection (i.e., some moment is common to all the three events.).
The event can be represented as a pair of integers startTime and endTime that represents a booking on the half-open interval [startTime, endTime), the range of real numbers x such that startTime <= x < endTime.
Implement the MyCalendarTwo class:
MyCalendarTwo() Initializes the calendar object.boolean book(int startTime, int endTime) Returns true if the event can be added to the calendar successfully without causing a triple booking. Otherwise, return false and do not add the event to the calendar. Input
["MyCalendarTwo", "book", "book", "book", "book", "book", "book"]
[[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]]
Output
[null, true, true, true, false, true, true]
Explanation
1000 calls will be made to book.The brute force approach involves checking if a new event can be added without causing a double booking. This requires maintaining two lists: one for all booked events and another for overlaps of these events. Every new event is checked against these lists, ensuring it doesn't add a triple booking.
book method, because each booking may need to check against every other booking for overlap.An optimization over the previous approach. Instead of blindly checking and updating as in brute force, we focus on preventing any triple bookings by carefully maintaining only necessary overlaps.
Using a TreeMap allows us to efficiently track the number of active bookings at any point in time. By incrementing at the start of a booking and decrementing at the end, we can determine double bookings through a sweep-line algorithm.