My Calendar I
Implement aMyCalendar
class to store your events. A new event can be added if adding the event will not cause a double booking.
Your class will have the method,book(int start, int end)
. Formally, this represents a booking on the half open interval[start, end)
, the range of real numbersx
such thatstart <= x < end
.
Adouble bookinghappens when two events have some non-empty intersection (ie., there is some time that is common to both events.)
For each call to the methodMyCalendar.book
, returntrue
if the event can be added to the calendar successfully without causing a double booking. Otherwise, returnfalse
and do not add the event to the calendar.
Your class will be called like this:
MyCalendar cal = new MyCalendar();
MyCalendar.book(start, end)
Example 1:
Note:
The number of calls to
MyCalendar.book
per test case will be at most
1000
.In calls to
MyCalendar.book(start, end)
,start
andend
are integers in the range[0, 10^9]
.
Solution
Naive ArrayList Implementation
O(N) time for each book() operation, N is existing booking events in the list
O(N) space
75 ms, faster than 95.89%
TreeMap -- Self-Balanced Binary Tree Implementation
每次寻找start 对应的floorKey, ceilingKey,比较start,end以及相邻两个区间的起始终止点,来判断是否有可行的插入区间。
Time: O(logN). Where NN is the number of events booked. For each new event, we search that the event is legal in O(logN) time, then insert it in O(logN) time.
Space: O(N)
Last updated