LeetCode每日一题——729. 我的日程安排表 I

简介: 实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。

题目

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。

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

日程可以用一对整数 start 和 end 表示,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end 。

实现 MyCalendar 类:

MyCalendar() 初始化日历对象。

boolean book(int start, int end) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 false 并且不要将该日程安排添加到日历中。

示例

输入: [“MyCalendar”, “book”, “book”, “book”] [[], [10, 20], [15, 25],[20, 30]]

输出: [null, true, false, true]

解释: MyCalendar myCalendar = new MyCalendar(); myCalendar.book(10, 20);// return True

myCalendar.book(15, 25); // return False这个日程安排不能添加到日历中,因为时间 15 已经被另一个日程安排预订了。

myCalendar.book(20, 30); //return True ,这个日程安排可以添加到日历中,因为第一个日程安排预订的每个时间都小于 20 ,且不包含时间 20 。

提示:

0 <= start < end <= 109

每个测试用例,调用 book 方法的次数最多不超过 1000 次。

思路

哈希表中或者列表中存储给定符合条件的start和end

条件是: 给定的区间一定要在我已经存储的符合条件的区间之外

即start >= 存储的所有end或者end <= 存储的所有start

如果符合条件存储返回True,不符合条件直接返回False

题解

class MyCalendar:
    def __init__(self):
        # 哈希set存储目标值
        self.temp = set()
    def book(self, start: int, end: int) -> bool:
        judge = True
        # 判断是否符合条件
        for i in self.temp:
            if start >= i[1] or end <= i[0]:
                continue
            else:
                judge = False
                break
        if judge:
            self.temp.add((start, end))
            return True
        else:
            return False
# Your MyCalendar object will be instantiated and called as such:
# obj = MyCalendar()
# param_1 = obj.book(start,end)


目录
相关文章
|
6月前
|
SQL 算法 vr&ar
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
|
JavaScript 前端开发
leetcode 1418.点菜展示表(JavaScript)
leetcode 1418.点菜展示表(JavaScript)
40 0
leetcode-每日一题731. 我的日程安排表 II
题目需要我们判断在重复的预定时间里,有三重预定的返回false,那我们可以定义一个pair结构体用来表示时间段,MyCalendarTwo结构体用来存成功预定的时间段booked切片,和有重复预定的时间段overlaps切片,overlaps切片用来判断新进的时间段是否跟overlaps有重合预定的情况,若有则返回false,没有则true
104 0
leetcode-每日一题731. 我的日程安排表 II
leetcode-每日一题729. 我的日程安排表 I
我们把安排成功的日程插入到日历切片里,Book方法只需要遍历日历切片,如果存在时间交叉的日程则直接返回 false, 没有则将日程插入到日历切片当中,返回true
72 0
leetcode-每日一题729. 我的日程安排表 I
leetcode【哈希表—简单】383.赎金信 II
leetcode【哈希表—简单】383.赎金信 II
leetcode【哈希表—简单】383.赎金信 II
leetcode【哈希表—中等】454.四数相加 II
leetcode【哈希表—中等】454.四数相加 II
leetcode【哈希表—中等】454.四数相加 II
|
存储 容器
LeetCode contest 185 1418. 点菜展示表
LeetCode contest 185 1418. 点菜展示表
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行