TreeMap start → end
Time O(log n) per booking Space O(n)prev = floorEntry(start): must end ≤ start. next = ceilingKey(start): must be ≥ end.
book(10, 20), book(15, 25), book(20, 30)booked(map)
answers(list)
Step 1/3book(10, 20): the diary is empty, so store it.
import java.util.*;
class MyCalendar {
private final TreeMap<Integer, Integer> booked = new TreeMap<>();
public MyCalendar() {}
public boolean book(int start, int end) {
Map.Entry<Integer, Integer> prev = booked.floorEntry(start);
Integer next = booked.ceilingKey(start);
if (prev != null && prev.getValue() > start) return false;
if (next != null && next < end) return false;
booked.put(start, end);
return true;
}
}Verdict: Ordered map for a dynamic set of intervals.