来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/my-calendar-i 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。
当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。
日程可以用一对整数 start 和 end 表示,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end 。
实现 MyCalendar 类:
MyCalendar() 初始化日历对象。
boolean book(int start, int end) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 false 并且不要将该日程安排添加到日历中。

解答

这道题主要是碰撞检测

  1. var MyCalendar = function() {
  2. this.times = []
  3. };
  4. /**
  5. * @param {number} start
  6. * @param {number} end
  7. * @return {boolean}
  8. */
  9. MyCalendar.prototype.book = function(start, end) {
  10. let isCrash = false;
  11. this.times.forEach(time => {
  12. const [_start, _end] = time;
  13. if (_start < start && start < _end) {
  14. isCrash = true;
  15. }
  16. if (_start < end && end < _end) {
  17. isCrash = true;
  18. }
  19. if (start < _start && _start < end) {
  20. isCrash = true;
  21. }
  22. if (start < _end && _end < end) {
  23. isCrash = true;
  24. }
  25. if (_start === start && _end === end) {
  26. isCrash = true;
  27. }
  28. });
  29. if (!isCrash) {
  30. this.times.push([start, end]);
  31. }
  32. return !isCrash;
  33. };