福建自己建设网站,义乌市企推网络科技有限公司,wordpress免费手机模板,本周国内重大新闻十条题目描述#xff1a;
实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 #xff0c;则可以存储这个新的日程安排。
当两个日程安排有一些时间上的交叉时#xff08;例如两个日程安排都在同一时间内#xff09;#xff0c;就会产生 重复…题目描述
实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 则可以存储这个新的日程安排。
当两个日程安排有一些时间上的交叉时例如两个日程安排都在同一时间内就会产生 重复预订 。
日程可以用一对整数 startTime 和 endTime 表示这里的时间是半开区间即 [startTime, endTime), 实数 x 的范围为 startTime x endTime 。
实现 MyCalendar 类
MyCalendar() 初始化日历对象。boolean book(int startTime, int endTime) 如果可以将日程安排成功添加到日历中而不会导致重复预订返回 true 。否则返回 false 并且不要将该日程安排添加到日历中。
代码思路
类定义和初始化 类定义: class MyCalendar: 定义了一个名为MyCalendar的类。 初始化方法 __init__(self): 创建一个名为temp的集合set。这个集合用来存储已经预定的时间段的元组每个元组包含两个元素开始时间和结束时间即(start, end)。使用集合是因为集合提供了快速的成员检查和添加操作这对于判断新的预定是否与已有预定重叠非常有用。
预定方法
预定方法 book(self, start: int, end: int) - bool: 这个方法接受两个参数start预定的开始时间和end预定的结束时间。定义一个名为judge的布尔变量初始化为True用于标记新的预定是否与已有预定重叠。遍历已有预定: 使用一个for循环遍历temp集合中的每个预定(i_start, i_end)。对于每个已存在的预定检查新的预定是否与其重叠。重叠的条件是新的预定的开始时间start小于已有预定的结束时间i_end且新的预定的结束时间end大于已有预定的开始时间i_start。如果新的预定不与当前遍历的预定重叠则继续遍历使用continue。如果发现重叠则将judge设置为False并跳出循环。添加新的预定或返回结果: 如果judge保持为True即没有重叠则将新的预定(start, end)添加到temp集合中并返回True表示预定成功。如果judge变为False即存在重叠则直接返回False表示预定失败。
使用示例
创建一个MyCalendar对象obj MyCalendar()使用book方法预定时间段param_1 obj.book(start, end) 如果返回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]:continueelse:judge Falsebreakif judge:self.temp.add((start, end))return Trueelse:return False# Your MyCalendar object will be instantiated and called as such:
# obj MyCalendar()
# param_1 obj.book(start,end)