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