我的日程安排表 II
731. 我的日程安排表 II
實現一個 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)
示例:
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)將和第二個日程安排雙重預訂。
我這個解法應該是最快的一個解法,了,但是空間開銷無法通過
typedef struct {int a[100000];} MyCalendarTwo;MyCalendarTwo* myCalendarTwoCreate() {MyCalendarTwo * m=(MyCalendarTwo *)malloc(sizeof(MyCalendarTwo));int i=0;for(i=0;i<100000;i++){m->a[i]=0;}return m;}bool myCalendarTwoBook(MyCalendarTwo* obj, int start, int end) {int i=0;int j;for(i=start;i<end;i++){obj->a[i]++;if(obj->a[i]>=3){for(j=i;j>=start;j--){obj->a[j]--;}return false;}}return true;}void myCalendarTwoFree(MyCalendarTwo* obj) {}/*** Your MyCalendarTwo struct will be instantiated and called as such:* MyCalendarTwo* obj = myCalendarTwoCreate();* bool param_1 = myCalendarTwoBook(obj, start, end);* myCalendarTwoFree(obj); */總結
以上是生活随笔為你收集整理的我的日程安排表 II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式理论,架构设计
- 下一篇: [js高手之路]html5 canvas