LeetCode 729 我的日程安排表 I

2021-08-26 09:14:51 字數 2494 閱讀 2671

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