书上是用Java
中的TreeMap
,其对应C++
中的map
,底层是红黑树,即平衡的二叉搜索树,map
中的键用来存放日程的起始时间,值用来存放日程的终止时间。
注意C++
中map
的lower_bound()
方法和upper_bound()
方法并不是一个取下界一个取上界的意思,举例如下:
lower_bound(k)
表示找到map
中键值大于等于k
的元素;upper_bound(k)
表示找到map
中键值大于k
的元素。
class MyCalendar {
private:
map<int, int> hash;
public:
MyCalendar() {}
bool book(int start, int end) {
map<int, int>::iterator event = hash.lower_bound(start);
//当前迭代器存在,并且迭代器左边界小于待插入日程的右边界
if (event != hash.end() && event->first < end) return false;
//上一迭代器存在,并且迭代器右边界大于待插入日程的左边界
if (event != hash.begin() && ( -- event)->second > start) return false;
hash[start] = end;
return true;
}
};