标签
数组
设计
日期
Oct 27, 2022
剑指 Offer II 058. 日程表
题目描述
请实现一个
MyCalendar
类来存放你的日程安排。如果要添加的时间内没有其他安排,则可以存储这个新的日程安排。MyCalendar
有一个 book(int start, int end)
方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 [start, end)
, 实数 x
的范围为, start <= x < end
。当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生重复预订。
每次调用
MyCalendar.book
方法时,如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true
。否则,返回 false
并且不要将该日程安排添加到日历中。请按照以下步骤调用
MyCalendar
类: MyCalendar cal = new MyCalendar();
MyCalendar.book(start, end)
示例:
题目解析
思路:
- 一开始的想法是用一个list的来存已被预定的日程,初始化list时用0填充,已被预定的用1填充,如果预定的时候当前阶段内包含1则返回true,但
0 <= start < end <= 109
区间过大导致list没有那么大容量来存那么多数据
- 后面在看题解是发现有用数组来存取预定区间的,就尝试了一下,确实可行
- 将预定的区间存入list中,在每次预定的时候都比对list中已预定的区间开始值和结束值,判断新日程开始值和结束值和已预定区间是否有重叠,有的话则返回false,没有重叠部分则将新日程区间加入list并返回true