📅 避免三重预订:实现一个支持双重预订的日程安排系统(MyCalendarTwo)
✨ 题目描述
在日常生活或工作中,日程安排是非常常见的功能。在本题中,我们希望实现一个简化版的日历系统 MyCalendarTwo
,它允许最多两个事件在同一时间段重叠,但不允许三重重叠。
✅ 要求如下:
- 实现一个类
MyCalendarTwo
,支持以下方法:
-
MyCalendarTwo()
:初始化日历对象。book(int startTime, int endTime)
:尝试预订一个[startTime, endTime)
的事件。如果这个事件的加入不会导致某一时间段有三个或更多事件重叠,则返回true
,否则返回false
并且不添加这个事件。
⚠️ 所有事件以半开区间表示 [startTime, endTime)
,即开始时间包含,结束时间不包含。
🧠 解题分析
本题关键在于如何有效判断三重预订是否发生。
🧩 什么是三重预订?
当 三个或更多事件的时间区间有交集,即同一时刻被三个事件占用,就称为发生了三重预订。我们必须阻止这种情况的发生。
🧮 解题方法一:暴力重叠检查(错误思路)
我们首先尝试实现如下逻辑:
- 维护一个事件列表
events
。 - 每次预定新事件,遍历现有所有事件,找出与之重叠的区间
overlaps
。 - 检查
overlaps
中是否有互相之间再次重叠的区间(即三重交集)。 - 如果有三重交集,返回
false
,否则添加事件。
# 错误方法:性能差且存在误判