# LeetCode – My Calendar II (Java)

Implement a MyCalendarTwo class to store your events. A new event can be added if adding the event will not cause a triple booking.

Your class will have one method, book(int start, int end). Formally, this represents a booking on the half open interval [start, end), the range of real numbers x such that start <= x < end. A triple booking happens when three events have some non-empty intersection (ie., there is some time that is common to all 3 events.) For each call to the method MyCalendar.book, return 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. Your class will be called like this: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

```Example:

MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(50, 60); // returns true
MyCalendar.book(10, 40); // returns true
MyCalendar.book(5, 15); // returns false
MyCalendar.book(5, 10); // returns true
MyCalendar.book(25, 55); // returns true
```

Java Solution

This is a more complicated version of My Calendar I, in which we only care if a time interval is used already. For this problem, we can add another list to track the double booked intervals.

```class MyCalendarTwo { ArrayList<int[]> single = null; ArrayList<int[]> overlap = null;   public MyCalendarTwo() { single = new ArrayList<>(); overlap = new ArrayList<>(); }   public boolean book(int start, int end) { for (int[] itv : overlap) { if (end > itv[0] && start < itv[1]) { return false; } }   for (int[] itv : single) { if (end > itv[0] && start < itv[1]) { overlap.add(new int[]{Math.max(itv[0], start), Math.min(itv[1], end)}); } }   single.add(new int[]{start, end});   return true; } }```

Time complexity is O(N^2) as each book operation iterate over all existing intervals. Space complexity is O(N).

Category >> Algorithms
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```