732 我的日程安排表 III

2021-09-11 08:04:48 字數 1343 閱讀 8095

題目:

實現乙個 mycalendar 類來存放你的日程安排,你可以一直新增新的日程安排。

mycalendar 有乙個 book(int start, int end)方法。它意味著在start到end時間內增加乙個日程安排,注意,這裡的時間是半開區間,即 [start, end), 實數 x 的範圍為, start <= x < end。

當 k 個日程安排有一些時間上的交叉時(例如k個日程安排都在同一時間內),就會產生 k 次預訂。

每次呼叫 mycalendar.book方法時,返回乙個整數 k ,表示最大的 k 次預訂。

請按照以下步驟呼叫mycalendar 類: mycalendar cal = new mycalendar(); mycalendar.book(start, end)

示例 1:

mycalendarthree();

mycalendarthree.book(10, 20); // returns 1

mycalendarthree.book(50, 60); // returns 1

mycalendarthree.book(10, 40); // returns 2

mycalendarthree.book(5, 15); // returns 3

mycalendarthree.book(5, 10); // returns 3

mycalendarthree.book(25, 55); // returns 3

解釋:前兩個日程安排可以預訂並且不相交,所以最大的k次預訂是1。

第三個日程安排[10,40]與第乙個日程安排相交,最高的k次預訂為2。

其餘的日程安排的最高k次預訂僅為3。

請注意,最後一次日程安排可能會導致區域性最高k次預訂為2,但答案仍然是3,原因是從開始到最後,時間[10,20],[10,40]和[5,15]仍然會導致3次預訂。

說明:每個測試用例,呼叫 mycalendar.book 函式最多不超過 400次。

呼叫函式 mycalendar.book(start, end)時, start 和 end 的取值範圍為 [0, 10^9]。

思路:建立乙個時間點與次數的對映,遇到起始點次數加1,結束點次數減1,利用treemap的特性,每次自動排序區間後,每次都從起點到結尾cnt累加,維護最大次數和就可以了。

**:

class mycalendarthree 

intbook

(int start,

int end)

return mx;

} private:

map<

int,

int> freq;

};

732 我的日程安排表 III

實現乙個mycalendar類來存放你的日程安排,你可以一直新增新的日程安排。mycalendar有乙個book int start,int end 方法。它意味著在start到end時間內增加乙個日程安排,注意,這裡的時間是半開區間,即 start,end 實數x的範圍為,start x end。...

LeetCode 我的日程安排表III(細節處理)

實現乙個 mycalendar 類來存放你的日程安排,你可以一直新增新的日程安排。mycalendar 有乙個 book int start,int end 方法。它意味著在start到end時間內增加乙個日程安排,注意,這裡的時間是半開區間,即 start,end 實數 x 的範圍為,start ...

729 我的日程安排表 I

實現乙個mycalendar類來存放你的日程安排。如果要新增的時間內沒有其他安排,則可以儲存這個新的日程安排。mycalendar有乙個book int start,int end 方法。它意味著在 start 到 end 時間內增加乙個日程安排,注意,這裡的時間是半開區間,即 start,end ...