實現一個 MyCalendar 類來存放你的日程安排檩互。如果要添加的時間內不會導致三重預訂時,則可以存儲這個新的日程安排木张。
MyCalendar 有一個 book(int start, int end)方法左刽。它意味著在 start 到 end 時間內增加一個日程安排,注意岳瞭,這里的時間是半開區(qū)間,即 [start, end), 實數 x 的范圍為蚊锹, start <= x < end瞳筏。
當三個日程安排有一些時間上的交叉時(例如三個日程安排都在同一時間內),就會產生三重預訂牡昆。
每次調用 MyCalendar.book方法時姚炕,如果可以將日程安排成功添加到日歷中而不會導致三重預訂,返回 true丢烘。否則柱宦,返回 false 并且不要將該日程安排添加到日歷中。
請按照以下步驟調用MyCalendar 類: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)
MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(50, 60); // returns true
MyCalendar.book(10, 40); // returns true
MyCalendar.book(5, 15); // returns false
MyCalendar.book(5, 10); // returns true
MyCalendar.book(25, 55); // returns true
解釋:
前兩個日程安排可以添加至日歷中播瞳。 第三個日程安排會導致雙重預訂掸刊,但可以添加至日歷中。
第四個日程安排活動(5,15)不能添加至日歷中赢乓,因為它會導致三重預訂忧侧。
第五個日程安排(5,10)可以添加至日歷中石窑,因為它未使用已經雙重預訂的時間10。
第六個日程安排(25,55)可以添加至日歷中蚓炬,因為時間 [25,40] 將和第三個日程安排雙重預訂松逊;
時間 [40,50] 將單獨預訂,時間 [50,55)將和第二個日程安排雙重預訂肯夏。
class MyCalendarTwo {
List<int[]> one = new ArrayList();
List<int[]> second = new ArrayList();
public boolean book(int start, int end) {
for (int[] arr: second) {
int left = arr[0];
int right = arr[1];
if (left < end && right > start) {
return false;
}
}
for (int[] arr: one) {
int left = arr[0];
int right = arr[1];
if (left < end && right > start) {
second.add(new int[]{Math.max(left, start), Math.min(right, end)});
}
}
one.add(new int[]{start, end});
return true;
}
}