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 (i.e., some moment is common to both events.).
The event can be represented as a pair of integers start and end that represents a booking on the half-open interval [start, end), the range of real numbers x such that start <= x < end.
Implement the MyCalendar class:
MyCalendar() Initializes the calendar object.
boolean book(int start, int end) Returns true if the event can be added to the calendar successfully without causing a double booking. Otherwise, return false and do not add the event to the calendar.
Input
["MyCalendar","book","book","book"][[],[10,20],[15,25],[20,30]]Output
[null,true,false,true]Explanation
MyCalendar myCalendar =new MyCalendar();myCalendar.book(10,20);// return True
myCalendar.book(15,25);// return False, It can not be booked because time 15 is already booked by another event.
myCalendar.book(20,30);// return True, The event can be booked, as the first event takes every time less than 20, but not including 20.
classMyCalendar {
privatefinal TreeMap<Integer,Integer> calendar;
publicMyCalendar() {
calendar =new TreeMap<>();
}
publicbooleanbook(int start, int end) {
// pair where endTime in map// is greater than provided start time Map.Entry<Integer,Integer> higherPair = calendar.higherEntry(start);
// if pair exists and start time of pair// is less than proided endtimeboolean isCollision = higherPair !=null&& end > higherPair.getValue();
if(isCollision) {
returnfalse;
}
calendar.put(end, start);
returntrue;
}
}
classMyCalendar {
final TreeMap<Integer, Integer> calendar;
publicMyCalendar() {
calendar =new TreeMap<>();
}
publicbooleanbook(int start, int end) {
// Condition for checking start time// if current start time is lower than its lower entry end time// that means overlapping hence return false.if(calendar.floorEntry(start) !=null&& start < calendar.floorEntry(start).getValue())
returnfalse;
// condition for checking end time// if current end time is greater than its next event start time// means overlapping hence return false.if(calendar.ceilingEntry(start) !=null&& end > calendar.ceilingEntry(start).getKey())
returnfalse;
calendar.put(start, end);
returntrue;
}
}