题目描述
题目不难,看到其他的c++题解不够直观
插入每个区间的时候,只需要看两点
(1)start的上一个区间的结尾是否超过了start
(2)start的下一个区间的开头是否被end超过
用map的lower_bound可以求出下一个区间
C++ 代码
class MyCalendar {
public:
map<int, int> hash;
MyCalendar() {
}
bool book(int start, int end) {
if (hash.empty())
{
hash[start] = end;
return true;
}
auto up = hash.lower_bound(start);
if (up != hash.end())
if (up->first < end) return false;
if (up != hash.begin())
{
up--;
if (up->second > start) return false;
}
hash[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);
*/