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

2021-09-20 10:24:41 字數 2171 閱讀 9470

實現乙個 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]。

思路分析:請先翻閱 leetcode 我的日程安排表ii(細節處理),下面的**均是上一題的修改!

這道題與上一題基本一樣,我們只要使用乙個計數器記錄當前日程表中最大安排次數即可。

//每個時間段程式表示[start, end],注意與題中[start, end)中右區間的閉合差異

struct agenda

agenda

(int _start,

int _end,

int _cnt =1)

};class

mycalendarthree

intbook

(int start,

int end)

if(it == mylist.

end(

)|| it-

>start >= end)

//第二步:將[start, end - 1]插入到list中,對於已經在list的部分,直接將cnt自增,不在cnt的部分插入

最快的都要175ms+,非常開森

LeetCode 我的日程安排表I

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

732 我的日程安排表 III

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

729 我的日程安排表 I

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