Leetcode-729. 我的日程安排表 I(模拟题,思维巧妙)
链接:https://leetcode-cn.com/problems/my-calendar-i/
729. 我的日程安排表 I
题意:给出多个区间,查询某个区间是否与其前的区间相交
思路:维护pair排序后序列,对于输入区间二分到可能相交的区间进行判断,时间复杂度为O(NlogN),参考网络题解思路
反思:两个区间相交的条件不容易想,但是两个区间不相交的条件好想,a.end<b.start即可,模拟题中正面条件不好总结可以反向思考
代码:
class MyCalendar {
map<int,int> ans;
public:
MyCalendar() {
ans.clear();
}
bool book(int s, int e) {
e--;//把开区间化为闭区间
auto p=ans.lower_bound(s);
if (p!=ans.end() && p->second<=e)//找到第一个比左边大的右边,如果它的左边大于e则两个不相交
return false;
ans[e]=s;//存右边,查询的时候已经对左边进行判断了
return true;
}
};

浙公网安备 33010602011771号