剑指 Offer II 058. 日程表b
| 2023-3-30
0  |  Read Time 0 min
标签
数组
设计
日期
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

代码:

Loading...
Catalog