我的日程安排表
阿新 • • 發佈:2019-01-03
實現一個
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)
示例 1:
MyCalendar(); MyCalendar.book(10, 20); // returns true MyCalendar.book(15, 25); // returns false MyCalendar.book(20, 30); // returns true 解釋: 第一個日程安排可以新增到日曆中. 第二個日程安排不能新增到日曆中,因為時間 15 已經被第一個日程安排預定了。 第三個日程安排可以新增到日曆中,因為第一個日程安排並不包含時間 20 。
說明:
- 每個測試用例,呼叫
MyCalendar.book
函式最多不超過100
次。 - 呼叫函式
MyCalendar.book(start, end)
時,start
和end
的取值範圍為[0, 10^9]
。
C++程式碼實現:
class MyCalendar { private: vector<pair<int, int>> books; public: MyCalendar() { } bool book(int start, int end) { for(pair<int, int> p : books) { if(max(p.first,start)<min(end, p.second)) return false;//判斷重疊的演算法 } books.push_back({start,end}); return true; } }; /** * Your MyCalendar object will be instantiated and called as such: * MyCalendar obj = new MyCalendar(); * bool param_1 = obj.book(start,end); */