# 759. Employee Free Time

We are given a list `schedule` of employees, which represents the working time for each employee.

Each employee has a list of non-overlapping `Intervals`, and these intervals are in sorted order.

Return the list of finite intervals representing common, positive-length free time for  all  employees, also in sorted order.

Example 1:

``````Input: schedule = [[[1,2],[5,6]],[[1,3]],[[4,10]]]
Output: [[3,4]]
Explanation:
There are a total of three employees, and all common
free time intervals would be [-inf, 1], [3, 4], [10, inf].
We discard any intervals that contain inf as they aren't finite.
``````

Example 2:

``````Input: schedule = [[[1,3],[6,7]],[[2,4]],[[2,5],[9,12]]]
Output: [[5,6],[7,9]]
``````

(Even though we are representing `Intervals` in the form `[x, y]`, the objects inside are `Intervals`, not lists or arrays. For example, `schedule[0][0].start = 1, schedule[0][0].end = 2`, and `schedule[0][0][0]` is not defined.)

Also, we wouldn’t include intervals like [5, 5] in our answer, as they have zero length.

Note:

1. `schedule` and `schedule[i]` are lists with lengths in range `[1, 50]`.
2. `0 <= schedule[i].start < schedule[i].end <= 10^8`.

``````class Solution {
public:
vector<Interval> employeeFreeTime(vector<vector<Interval>>& schedule) {
vector<Interval> res, v;
for (auto a : schedule) {
v.insert(v.end(), a.begin(), a.end());
}
sort(v.begin(), v.end(), [](Interval &a, Interval &b) {return a.start < b.start;});
Interval t = v[0];
for (Interval i : v) {
if (t.end < i.start) {
res.push_back(Interval(t.end, i.start));
t = i;
} else {
t = (t.end < i.end) ? i : t;
}
}
return res;
}
};
``````

1 -> 2
2 -> -1
3 -> -1
4 -> 1
5 -> 1
6 -> -1
10 -> -1

``````class Solution {
public:
vector<Interval> employeeFreeTime(vector<vector<Interval>>& schedule) {
vector<Interval> res;
map<int, int> m;
int cnt = 0;
for (auto employee : schedule) {
for (Interval i : employee) {
++m[i.start];
--m[i.end];
}
}
for (auto a : m) {
cnt += a.second;
if (!cnt) res.push_back(Interval(a.first, 0));
if (cnt && !res.empty() && !res.back().end) res.back().end = a.first;
}
if (!res.empty()) res.pop_back();
return res;
}
};
``````

Merge Intervals

https://leetcode.com/problems/employee-free-time/discuss/113127/C++-Clean-Code

https://leetcode.com/problems/employee-free-time/discuss/113134/Simple-Java-Sort-Solution-Using-(Priority-Queue)-or-Just-ArrayList

LeetCode All in One 题目讲解汇总(持续更新中…)

 微信打赏 Venmo 打赏
（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，试运营期间前五十位可享受半价优惠～）

×

Help us with donation