731. 我的日程安排表 II

📅 避免三重预订:实现一个支持双重预订的日程安排系统(MyCalendarTwo)

✨ 题目描述

在日常生活或工作中,日程安排是非常常见的功能。在本题中,我们希望实现一个简化版的日历系统 MyCalendarTwo,它允许最多两个事件在同一时间段重叠,但不允许三重重叠

✅ 要求如下:

  • 实现一个类 MyCalendarTwo,支持以下方法:
    • MyCalendarTwo():初始化日历对象。
    • book(int startTime, int endTime):尝试预订一个 [startTime, endTime) 的事件。如果这个事件的加入不会导致某一时间段有三个或更多事件重叠,则返回 true,否则返回 false 并且不添加这个事件。

⚠️ 所有事件以半开区间表示 [startTime, endTime),即开始时间包含,结束时间不包含。


🧠 解题分析

本题关键在于如何有效判断三重预订是否发生

🧩 什么是三重预订?

三个或更多事件的时间区间有交集,即同一时刻被三个事件占用,就称为发生了三重预订。我们必须阻止这种情况的发生。


🧮 解题方法一:暴力重叠检查(错误思路)

我们首先尝试实现如下逻辑:

  1. 维护一个事件列表 events
  2. 每次预定新事件,遍历现有所有事件,找出与之重叠的区间 overlaps
  3. 检查 overlaps 中是否有互相之间再次重叠的区间(即三重交集)。
  4. 如果有三重交集,返回 false,否则添加事件。
# 错误方法:性能差且存在误判
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值