[LeetCode] My Calendar II

731. My Calendar II

You are implementing a program to use as your calendar. We can add a new event if adding the event will not cause a triple booking.

A triple booking happens when three events have some non-empty intersection (i.e., some moment is common to all the three events.).

The event can be represented as a pair of integers start and end that represents a booking on the half-open interval [start, end), the range of real numbers x such that start <= x < end.

Implement the MyCalendarTwo class:

  • MyCalendarTwo() Initializes the calendar object.
  • boolean book(int start, int end) Returns true if the event can be added to the calendar successfully without causing a triple booking. Otherwise, return false and do not add the event to the calendar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class MyCalendarTwo {
map<int, int> m;
bool doFailure(int start, int end) {
m[start]--;
m[end]++;

if(!m[end]) m.erase(end);
if(!m[start]) m.erase(start);

return false;
}
public:
MyCalendarTwo() {}

bool book(int start, int end) {
m[start]++;
m[end]--;
int cnt = 0;
for(auto [k, v]: m) {
cnt += v;
if(cnt >= 3) {
return doFailure(start, end);
}
}

return true;
}
};

/**
* Your MyCalendarTwo object will be instantiated and called as such:
* MyCalendarTwo* obj = new MyCalendarTwo();
* bool param_1 = obj->book(start,end);
*/
Author: Song Hayoung
Link: https://songhayoung.github.io/2022/01/31/PS/LeetCode/my-calendar-ii/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.