一二三四五 上山打老虎

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;
    }
};

posted @ 2021-06-10 22:12  黒川川  阅读(52)  评论(0)    收藏  举报