729。我的日曆我
難度:中
主題:陣列、二分搜尋、設計、線段樹、有序集
您正在實作一個程式來用作您的日曆。如果新增活動不會導致重複預訂。
,我們可以新增活動雙重預訂發生在兩個事件有一些非空交叉點時(即,某些時刻是兩個事件共有的。)。
事件可以表示為一對整數 start 和 end,表示半開區間 [start, end) 上的預訂,實數 x 的範圍使得 start
實作 MyCalendar 類別:
範例1:
["MyCalendar", "book", "book", "book"] [[], [10, 20], [15, 25], [20, 30]]
[null, true, false, true]
MyCalendar myCalendar = new MyCalendar(); myCalendar.book(10, 20); // return True myCalendar.book(15, 25); // return False, It can not be booked because time 15 is already booked by another event. myCalendar.book(20, 30); // return True, The event can be booked, as the first event takes every time less than 20, but not including 20.
約束:
提示:
解:
我們需要儲存每個活動,並在預訂之前檢查新活動是否與任何現有活動衝突。由於最多允許 1000 次預訂電話,因此我們可以將活動儲存在清單中,並在預訂新活動時迭代它們以檢查是否有重疊。
讓我們用 PHP 實作這個解:729。我的行事曆我
<?php class MyCalendar { /** * @var array */ private $events; /** */ function __construct() { ... ... ... /** * go to ./solution.php */ } /** * Books an event if it does not cause a double booking * * @param Integer $start * @param Integer $end * @return Boolean */ function book($start, $end) { ... ... ... /** * go to ./solution.php */ } } /** * Your MyCalendar object will be instantiated and called as such: * $obj = MyCalendar(); * $ret_1 = $obj->book($start, $end); */ // Example Usage: $myCalendar = new MyCalendar(); var_dump($myCalendar->book(10, 20)); // true, no conflicts, booking added var_dump($myCalendar->book(15, 25)); // false, conflict with [10, 20] var_dump($myCalendar->book(20, 30)); // true, no conflicts, booking added ?>
建構子 (__construct):初始化一個空數組 $events 以追蹤所有預訂的事件。
預訂功能(書):
第一次預訂(書(10, 20)):
第二次預訂(書(15, 25)):
第三次預訂(書(20, 30)):
這種簡單的方法可有效處理多達 1000 個事件,同時保持清晰度和正確性。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是。我的日曆我的詳細內容。更多資訊請關注PHP中文網其他相關文章!