题目链接:LCR 058. 我的日程安排表 I - 力扣(LeetCode)
题目:
请实现一个类型 MyCalendar 用来记录自己的日程安排,该类型用方法 book(int start, int end) 在日程表中添加一个时间区域为 [start, end) 的事项(这是一个左闭右开区间)。如果 [start, end) 中之前没有安排其他事项,则成功添加该事项并返回 true;否则,不能添加该事项,并返回 false。
例如,在下面的 3 次调用 book 方法中,第 2 次调用返回 false,这是因为时间 [15, 20) 已经被第 1 次调用预留了。由于第 1 次占用的时间是一个左闭右开区间,并没有真正占用时间 20,因此不影响第 3 次调用预留时间区间 [20, 30)。
MyCalendar cal = new MyCalendar();
cal.book(10, 20); // return true
cal.book(15, 25); // return false
cal.book(20, 30); // return true
分析:
添加到日程表中的每个事项都占用一个时间段。根据题目的要求,两个事项不能占用同一个时间段,也就是说,事项对应的时间区间不能重叠。当需要插入一个新的事项时,就需要遍历日程表中已有事项占用的时间区间。
如果待添加的事项占用的时间区间是 [m, n),就需要找出开始时间小于 m 的所有事项中开始最晚的一个,以及开始时间大于或等于 m 的所有事项中开始最早的一个。如果待添加的事项和这两个事项都没有重叠,那么

313

被折叠的 条评论
为什么被折叠?



