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中文网其他相关文章!