Leetcode每日一题-1.2

729. 我的日程安排表 I

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。

当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订

日程可以用一对整数 startTimeendTime 表示,这里的时间是半开区间,即 [startTime, endTime), 实数 x 的范围为,  startTime <= x < endTime

实现 MyCalendar 类:

  • MyCalendar() 初始化日历对象。

  • boolean book(int startTime, int endTime) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 false 并且不要将该日程安排添加到日历中。

class MyCalendar {
    Queue<int[]> queue;
    public MyCalendar() {
        queue = new PriorityQueue<>((o1, o2) -> o1[0]-o2[0]);
    }
    
    public boolean book(int startTime, int endTime) {
        for (int[] date : queue) {
            if (date[0] <= startTime && endTime <= date[1]) return false;
            if ((date[1] > startTime && endTime > date[1]) || (date[0] < endTime && startTime < date[0])) return false;
        }
        queue.offer(new int[]{startTime, endTime});
        return true;
    }
}

LICENSED UNDER CC BY-NC-SA 4.0
Comment