Fork me on GitHub

Employee Free Time

Description

https://leetcode.com/problems/employee-free-time/description/

Solution

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
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {

public:
bool static compare(Interval& a, Interval& b) {
return a.start < b.start;
}
vector<Interval> employeeFreeTime(vector<vector<Interval>>& schedule) {
vector<Interval> whole;
for (auto& item : schedule) {
for (auto& item2 : item) {
whole.push_back(item2);
}
}
sort(whole.begin(), whole.end(), compare);

int pre = -1;
vector<Interval> merged;
for (int index = 0; index < whole.size(); ++index) {
if (whole[index].start > pre) {
merged.push_back(whole[index]);
}else {
merged[merged.size() - 1].end =
max(whole[index].end, merged[merged.size() - 1].end);
}
pre = merged[merged.size() - 1].end;
}
vector<Interval> ret;
for (int index = 0; index < merged.size() - 1; ++index) {
ret.push_back(Interval(merged[index].end, merged[index + 1].start));
}
return ret;
}
};