leetcode-729:我的日程安排表 I

简介: leetcode-729:我的日程安排表 I

题目

题目连接

请实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。

MyCalendar 有一个 book(int start, int end)方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end

当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生重复预订。

每次调用 MyCalendar.book方法时,如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true。否则,返回 false 并且不要将该日程安排添加到日历中。

请按照以下步骤调用 MyCalendar 类: MyCalendar cal = new MyCalendar();MyCalendar.book(start, end)

示例:

输入:
["MyCalendar","book","book","book"]
[[],[10,20],[15,25],[20,30]]
输出: [null,true,false,true]
解释: 
MyCalendar myCalendar = new MyCalendar();
MyCalendar.book(10, 20); // returns true 
MyCalendar.book(15, 25); // returns false ,第二个日程安排不能添加到日历中,因为时间 15 已经被第一个日程安排预定了
MyCalendar.book(20, 30); // returns true ,第三个日程安排可以添加到日历中,因为第一个日程安排并不包含时间 20 

解题

此题和 剑指 Offer II 058:日程表是一样的

方法一:map+二分查找

由于map会自动对 key进行排序,因此直接对左边界排序。

通过二分查找,找到大于等于end,的左边界。

只要使得,上一个的右边界比start小就能插入成功

class MyCalendar {
public:
    map<int,int> mp;
    MyCalendar() {
    }
    bool book(int start, int end) {
        map<int,int>::iterator it=mp.lower_bound(end);// 返回 key值 大于等于 end 的第一个位置
        if(it==mp.begin()||(--it)->second<=start){
            mp[start]=end;
            return true;
        }
        return false;
    }
};
相关文章
|
8月前
|
Java C++ Python
试题 基础练习 回形取数
试题 基础练习 回形取数
39 0
|
7月前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第六讲根据部门列创建工作表
杨老师课堂之Excel VBA 程序开发第六讲根据部门列创建工作表
48 0
|
7月前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第六讲 根据制定列创建相应工作表及数据
杨老师课堂之Excel VBA 程序开发第六讲 根据制定列创建相应工作表及数据
38 1
第一次机房收费系统之正在值班教师
第一次机房收费系统之正在值班教师
55 0
机房收费系统-学生查看上机记录
机房收费系统-学生查看上机记录
|
存储 索引 Cloud Native
【刷题日记】1656. 设计有序流
【刷题日记】1656. 设计有序流
|
数据采集 机器学习/深度学习 数据挖掘
数据处理|数据查重怎么办?去重,就这么办!
数据处理|数据查重怎么办?去重,就这么办!
169 0
leetcode-每日一题729. 我的日程安排表 I
我们把安排成功的日程插入到日历切片里,Book方法只需要遍历日历切片,如果存在时间交叉的日程则直接返回 false, 没有则将日程插入到日历切片当中,返回true
82 0
leetcode-每日一题729. 我的日程安排表 I
leetcode-每日一题731. 我的日程安排表 II
题目需要我们判断在重复的预定时间里,有三重预定的返回false,那我们可以定义一个pair结构体用来表示时间段,MyCalendarTwo结构体用来存成功预定的时间段booked切片,和有重复预定的时间段overlaps切片,overlaps切片用来判断新进的时间段是否跟overlaps有重合预定的情况,若有则返回false,没有则true
121 0
leetcode-每日一题731. 我的日程安排表 II
编号(太晚了,先发一题,可能以后题都单发了,方便分类整理)
编号(太晚了,先发一题,可能以后题都单发了,方便分类整理)
68 0