731。我的日历 II
难度:中等
主题:数组、二分查找、设计、线段树、前缀和、有序集
您正在实现一个程序来用作您的日历。如果添加活动不会导致三重预订。
,我们可以添加新活动三重预订发生在三个事件有一些非空交叉点时(即,某些时刻是所有三个事件共有的。)。
事件可以表示为一对整数 start 和 end,表示半开区间 [start, end) 上的预订,实数 x 的范围使得 start
实现 MyCalendarTwo 类:
示例1:
["MyCalendarTwo", "book", "book", "book", "book", "book", "book"] [[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]]
[null, true, true, true, false, true, true]
MyCalendarTwo myCalendarTwo = new MyCalendarTwo(); myCalendarTwo.book(10, 20); // return True, The event can be booked. myCalendarTwo.book(50, 60); // return True, The event can be booked. myCalendarTwo.book(10, 40); // return True, The event can be double booked. myCalendarTwo.book(5, 15); // return False, The event cannot be booked, because it would result in a triple booking. myCalendarTwo.book(5, 10); // return True, The event can be booked, as it does not use time 10 which is already double booked. myCalendarTwo.book(25, 55); // return True, The event can be booked, as the time in [25, 40) will be double booked with the third event, the time [40, 50) will be single booked, and the time [50, 55) will be double booked with the second event.
约束:
提示:
解决方案:
我们需要维护两个预订列表:
当请求新活动时,我们需要检查是否会导致三重预订。为此:
最后,如果活动通过了两项检查,我们会将其添加到单次预订列表中。
让我们用 PHP 实现这个解决方案:731。我的日历 II
<?php class MyCalendarTwo { /** * @var array */ private $singleBookings; /** * @var array */ private $doubleBookings; /** */ function __construct() { ... ... ... /** * go to ./solution.php */ } /** * @param Integer $start * @param Integer $end * @return Boolean */ function book($start, $end) { ... ... ... /** * go to ./solution.php */ } } /** * Your MyCalendarTwo object will be instantiated and called as such: * $obj = MyCalendarTwo(); * $ret_1 = $obj->book($start, $end); */ // Example Usage $calendar = new MyCalendarTwo(); echo $calendar->book(10, 20) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(50, 60) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(10, 40) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(5, 15) ? 'true' : 'false'; // false echo "\n"; echo $calendar->book(5, 10) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(25, 55) ? 'true' : 'false'; // true echo "\n"; ?>
构造函数(__construct):用两个空数组初始化日历对象,以存储单次预订和双次预订。
图书功能(书籍):
此解决方案可根据问题约束的要求有效处理多达 1000 次对 book 函数的调用。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
以上是。我的日历二的详细内容。更多信息请关注PHP中文网其他相关文章!