题目地址
题目描述
Implement a MyCalendarThree
class to store your events. A new event can always be added.
Your class will have one method, book(int start, int end)
. Formally, this represents a booking on the half open interval [start, end)
, the range of real numbers x
such that start <= x < end
.
A K-booking happens when K events have some non-empty intersection (ie., there is some time that is common to all K events.)
For each call to the method MyCalendar.book
, return an integer K
representing the largest integer such that there exists a K
-booking in the calendar.
Your class will be called like this:
1 | MyCalendarThree cal = new MyCalendarThree(); |
Example 1:
1 | MyCalendarThree(); |
Note:
The number of calls to MyCalendarThree.book
per test case will be at most 400
.
In calls to MyCalendarThree.book(start, end)
, start
and end
are integers in the range [0, 10^9]
.
解题思路
题目要求实现一个类,类的book方法每次传入一个事件的起始时间和结束时间,然后返回当前所存在的所有事件的最多相交次数,即i时间点上有N个事件发生,求max(N0,N1,N2….Ni)。
这个精妙的思路是参考网上的,我们构建一个map用来存储时间点和时间点对应的事件个数,每当遇到起始时间,则给起始时间的事件个数加1,给结束时间的事件个数减一,最终求和。
解题代码【.CPP】
1 | class MyCalendarThree { |