问题:实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。
思路:
暴力解法:每次插入与已预定安排逐一进行比较,时间复杂度为O(n^2)。
平衡树法:借用C++中的map,时间复杂度为O(nlogn)。
class MyCalendar {
public:
MyCalendar() {
}
map<int,int> books;
bool book(int start, int end) {
auto next=books.lower_bound(start); // 返回books中的大于等于start的下个元素
if(next!=books.end()&&next->first<end) return false; // books.end()为books最后一个元素的下一个元素,不指向任何元素
if(next!=books.begin()&&(--next)->second>start) return false;
books[start]=end;
return true;
}
};
/**
* Your MyCalendar object will be instantiated and called as such:
* MyCalendar* obj = new MyCalendar();
* bool param_1 = obj->book(start,end);
*/
复杂度分析:时间复杂度为O(nlogn),空间复杂度为O(n).