實現乙個 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]。
1.具體方法:
給mycalendar類乙個calender屬性,初始化為開始時間為0,結束時間為10^9(見**)。book方法中遍歷陣列,直到發現可插入的縫隙即插入。
2.**:語言python
class
mycalendar:
def__init__
(self):
biggest=1e9
self.calender = [(0,0),(biggest,biggest)]
defbook
(self, start, end):
length=len(self.calender)
for index in range(1,length):
if start>=self.calender[index-1][1] and end<=self.calender[index][0]:
self.calender.insert(index,(start,end))
return
true
return
false
該方法簡單明瞭,但是有結果可以看見效率不高,那麼如何尋求改進呢?
我想這樣遍歷全陣列直到找到合適的地方才插入,那麼如果所給時間本身就和已有時間衝突,那麼本該直接退出的,結果卻遍歷完整個陣列。此外,在找尋時間相近的位置方面也可以用二分法優化。
class
mycalendar:
def__init__
(self):
biggest=1e9
self.calender = [(0,0),(biggest,biggest)]
defbook
(self, start, end):
length=len(self.calender)
if length==2:
self.calender.insert(1,(start,end))
return
true
else:
left=1
right=length-2
while left2
if self.calender[mid][0]>start:
right=mid-1
elif self.calender[mid][0]1
else:
return
false
if self.calender[left][0]>start:
if self.calender[left-1][1]<=start and self.calender[left][0]>=end:
self.calender.insert(left,(start,end))
return
true
else:
if self.calender[left+1][0]>=end and self.calender[left][1]<=start:
self.calender.insert(left+1,(start,end))
return
true
return
false
729 我的日程安排表 I
實現乙個mycalendar類來存放你的日程安排。如果要新增的時間內沒有其他安排,則可以儲存這個新的日程安排。mycalendar有乙個book int start,int end 方法。它意味著在 start 到 end 時間內增加乙個日程安排,注意,這裡的時間是半開區間,即 start,end ...
LeetCode 我的日程安排表I
實現乙個 mycalendar 類來存放你的日程安排。如果要新增的時間內沒有其他安排,則可以儲存這個新的日程安排。mycalendar 有乙個 book int start,int end 方法。它意味著在 start 到 end 時間內增加乙個日程安排,注意,這裡的時間是半開區間,即 start,...
LeetCode 我的日程安排表III(細節處理)
實現乙個 mycalendar 類來存放你的日程安排,你可以一直新增新的日程安排。mycalendar 有乙個 book int start,int end 方法。它意味著在start到end時間內增加乙個日程安排,注意,這裡的時間是半開區間,即 start,end 實數 x 的範圍為,start ...