1. 程式人生 > >我的日程安排表

我的日程安排表

實現一個 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);
 */