Leetcode731. 我的日程安排表 II

题目描述:

实现一个程序来存放你的日程安排。如果要添加的时间内不会导致三重预订时,则可以存储这个新的日程安排。

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

事件能够用一对整数 startTimeendTime 表示,在一个半开区间的时间 [startTime, endTime) 上预定。实数 x 的范围为 startTime <= x < endTime

实现 MyCalendarTwo 类:

  • MyCalendarTwo() 初始化日历对象。
  • boolean book(int startTime, int endTime) 如果可以将日程安排成功添加到日历中而不会导致三重预订,返回 true。否则,返回 false 并且不要将该日程安排添加到日历中。

代码思路:

成员变量:

  • self.bookings:一个列表,用于记录所有已成功预订的时间段。每个预订都以一个包含开始时间和结束时间的元组形式存在。
  • self.overlaps:一个列表,用于追踪所有检测到的双重重叠时间段。这些时间段是先前已接受的预订之间产生的重叠部分。

方法:book(startTime: int, endTime: int) -> bool

此方法用于尝试预订一个新的时间段,并返回一个布尔值来指示预订是否成功。

步骤解析:
  1. 三重重叠检查
    • 遍历self.overlaps列表,检查新的预订时间段是否与列表中的任何一个双重重叠时间段重叠。
    • 若重叠(即新的预订时间段与某个双重重叠时间段存在交集),则意味着添加此预订将导致三重重叠,因此方法返回False
  2. 更新双重重叠列表
    • 若新的预订未导致三重重叠,则继续遍历self.bookings列表,检查新的预订时间段是否与列表中的任何一个已接受预订重叠。
    • 若重叠,则计算重叠部分(即新的预订时间段与已接受预订时间段的交集),并将该双重重叠时间段添加到self.overlaps列表中。
  3. 预订添加
    • 将新的预订时间段添加到self.bookings列表中。
    • 返回True,表示预订已成功添加。

代码实现:

python 复制代码
class MyCalendarTwo:
    def __init__(self):
        self.bookings = []
        self.overlaps = []

    def book(self, startTime: int, endTime: int) -> bool:
        # 检查是否会导致三重预订
        for overlap_start, overlap_end in self.overlaps:
            if max(startTime, overlap_start) < min(endTime, overlap_end):
                return False
        
        # 更新 overlaps 列表
        for booked_start, booked_end in self.bookings:
            if max(startTime, booked_start) < min(endTime, booked_end):
                self.overlaps.append((max(startTime, booked_start), min(endTime, booked_end)))
        
        # 添加到 bookings 列表
        self.bookings.append((startTime, endTime))
        return True


# Your MyCalendarTwo object will be instantiated and called as such:
# obj = MyCalendarTwo()
# param_1 = obj.book(startTime,endTime)
相关推荐
Erik_LinX2 分钟前
算法日记25:01背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
算法·深度优先
Alidme9 分钟前
cs106x-lecture14(Autumn 2017)-SPL实现
c++·学习·算法·codestepbystep·cs106x
奔跑吧邓邓子10 分钟前
【Python爬虫(44)】分布式爬虫:筑牢安全防线,守护数据之旅
开发语言·分布式·爬虫·python·安全
小王努力学编程10 分钟前
【算法与数据结构】单调队列
数据结构·c++·学习·算法·leetcode
最遥远的瞬间12 分钟前
15-贪心算法
算法·贪心算法
程序员 小濠35 分钟前
接口测试基础 --- 什么是接口测试及其测试流程?
自动化测试·python·测试工具·职场和发展·appium·接口测试·压力测试
程序媛徐师姐43 分钟前
Python基于Django的酒店推荐系统【附源码】
python·django·酒店·酒店推荐·python django·酒店推荐系统·python酒店推荐系统
维齐洛波奇特利(male)1 小时前
(动态规划 完全背包 **)leetcode279完全平方数
算法·动态规划
~kiss~1 小时前
python的thrift2pyi学习
windows·python·学习
奔跑吧邓邓子1 小时前
【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅
开发语言·分布式·爬虫·python·大数据框架