Решение, объясненное Мажаром, работает нормально. Он использовал List вместо Map, чтобы отслеживать бронирования, и использовал методы для проверки перекрытия временных интервалов.
Это мой подход, который терпит неудачу.
Код: Выделить всё
class MyCalendarTwo {
TreeMap doubleBooking,
singleBooking;
public MyCalendarTwo() {
singleBooking = new TreeMap();
doubleBooking = new TreeMap();
}
public boolean book(int start, int end) {
int sMax, eMin;
for(Map.Entry doubleBook: doubleBooking.entrySet()){
sMax = Math.max(doubleBook.getKey(), start);
eMin = Math.min(doubleBook.getValue(), end);
if(sMax < eMin){
return false;
}
}
for(Map.Entry singleBook: singleBooking.entrySet()){
if(start < singleBook.getValue() && end > singleBook.getKey()){
doubleBooking.put((Math.max(start, singleBook.getKey())),
(Math.min(end, singleBook.getValue())));
}
}
singleBooking.put(start, end);
return true;
}
}
/**
* Your MyCalendarTwo object will be instantiated and called as such:
* MyCalendarTwo obj = new MyCalendarTwo();
* boolean param_1 = obj.book(start,end);
*/
Подробнее здесь: https://stackoverflow.com/questions/790 ... etcode-731