-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path057.cpp
46 lines (39 loc) · 1.21 KB
/
057.cpp
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
35
36
37
38
39
40
41
42
43
44
45
46
#include <vector>
#include <algorithm>
using Intervals = std::vector<std::vector<int>>;
using Interval = std::vector<int>;
class Solution {
public:
Intervals insert(Intervals& OldIntervals, Interval &NewInterval) {
OldIntervals.push_back(NewInterval);
return merge_(OldIntervals);
}
// copy from problem 56
private:
Intervals merge_(Intervals& OldIntervals) {
if (OldIntervals.empty()) {
return {};
}
std::sort(OldIntervals.begin(), OldIntervals.end());
Intervals MergedIntervals;
for (auto &OldInterval : OldIntervals) {
if (MergedIntervals.empty()) {
MergedIntervals.push_back(OldInterval);
continue;
}
auto &Back = MergedIntervals.back();
if (canMerge_(Back, OldInterval)) {
Back = {
Back[0],
std::max(Back[1], OldInterval[1])
};
} else {
MergedIntervals.push_back(OldInterval);
}
}
return MergedIntervals;
}
bool canMerge_(Interval LeftInterval, Interval RightInterval) {
return LeftInterval[1] >= RightInterval[0];
}
};