Implement a MyCalendarThree
class to store your events. A new event can always be added.html
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
.java
A K-booking happens when K events have some non-empty intersection (ie., there is some time that is common to all K events.)app
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.post
MyCalendarThree cal = new MyCalendarThree();
MyCalendarThree.book(start, end)
Example 1:this
MyCalendarThree(); MyCalendarThree.book(10, 20); // returns 1 MyCalendarThree.book(50, 60); // returns 1 MyCalendarThree.book(10, 40); // returns 2 MyCalendarThree.book(5, 15); // returns 3 MyCalendarThree.book(5, 10); // returns 3 MyCalendarThree.book(25, 55); // returns 3 Explanation: The first two events can be booked and are disjoint, so the maximum K-booking is a 1-booking. The third event [10, 40) intersects the first event, and the maximum K-booking is a 2-booking. The remaining events cause the maximum K-booking to be only a 3-booking. Note that the last event locally causes a 2-booking, but the answer is still 3 because eg. [10, 20), [10, 40), and [5, 15) are still triple booked.
Note:url
MyCalendarThree.book
per test case will be at most 400
.MyCalendarThree.book(start, end)
, start
and end
are integers in the range [0, 10^9]
.
這道題是以前那兩道題My Calendar II,My Calendar I的拓展,論壇上有人說這題不該該算是Hard類的,但實際上若是沒有以前那兩道題作鋪墊,直接上這道其實仍是還蠻有難度的。這道題博主在作完以前那道,再作這道一會兒就作出來了,由於用的就是以前那道My Calendar II的解法二,具體的講解能夠參見那道題,反正博主寫完那道題再來作這道題就是秒解啊,參見代碼以下:spa
class MyCalendarThree { public: MyCalendarThree() {} int book(int start, int end) { ++freq[start]; --freq[end]; int cnt = 0, mx = 0; for (auto f : freq) { cnt += f.second; mx = max(mx, cnt); } return mx; } private: map<int, int> freq; };
相似題目:code
參考資料:
https://discuss.leetcode.com/topic/111978/java-c-clean-code