当前位置: 首页 > article >正文

Leetcode729: 我的日程安排表 I

题目描述:

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

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

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

实现 MyCalendar 类:

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

代码思路:

类定义和初始化

  1. 类定义class MyCalendar: 定义了一个名为MyCalendar的类。

  2. 初始化方法 __init__(self):

    • 创建一个名为temp的集合(set)。这个集合用来存储已经预定的时间段的元组,每个元组包含两个元素:开始时间和结束时间,即(start, end)
    • 使用集合是因为集合提供了快速的成员检查和添加操作,这对于判断新的预定是否与已有预定重叠非常有用。

预定方法

  1. 预定方法 book(self, start: int, end: int) -> bool:
    • 这个方法接受两个参数:start(预定的开始时间)和end(预定的结束时间)。
    • 定义一个名为judge的布尔变量,初始化为True,用于标记新的预定是否与已有预定重叠。
  2. 遍历已有预定:
    • 使用一个for循环遍历temp集合中的每个预定(i_start, i_end)
    • 对于每个已存在的预定,检查新的预定是否与其重叠。重叠的条件是:新的预定的开始时间start小于已有预定的结束时间i_end,且新的预定的结束时间end大于已有预定的开始时间i_start
    • 如果新的预定不与当前遍历的预定重叠,则继续遍历(使用continue)。
    • 如果发现重叠,则将judge设置为False并跳出循环。
  3. 添加新的预定或返回结果:
    • 如果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]:
                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)

 

 


http://www.kler.cn/a/465821.html

相关文章:

  • 凸包(convex hull)简述
  • 提升汽车金融租赁系统的效率与风险管理策略探讨
  • 设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
  • ffmpeg之yuv格式转h264
  • mmsegmentation中img_scale的作用
  • vue3 vite 动态加载路由遇到的问题
  • Linux(Ubuntu)下ESP-IDF下载与安装完整流程(4)
  • 【从零开始入门unity游戏开发之——unity篇04】unity6基础入门——场景窗口(Scene)和层级窗口(Hierarchy)介绍
  • 浏览器选中文字样式
  • 设计模式 结构型 装饰器模式(Decorator Pattern)与 常见技术框架应用 解析
  • 软件逆向之OD基础
  • 游戏无法运行、图形显示错误、视频播放卡顿、音频播放无声等等电脑问题要怎么轻松解决?使用修复工具推荐!
  • 单片机-静动态数码管实验
  • DCGAN模型详解
  • Docker和K8s关系
  • 【人工智能】人工智能与大模型
  • Unity Excel转Json编辑器工具
  • 容器镜像构建上下文解释
  • DVWA靶场Open HTTP Redirect (重定向) 漏洞所有级别通关教程及源码审计
  • 计算机网络 (22)网际协议IP
  • Selenium 特殊控件操作与 ActionChains 实践详解
  • PCL点云库入门——PCL库点云特征之点云法向量(NormalEstimation)及其可视化
  • PyTorch快速入门教程【小土堆】之池化层
  • 【Cocos TypeScript 零基础 3.1】
  • 【Rust自学】9.4. 什么时候该使用panic!
  • 服务器等保测评日志策略配置