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:
schedule
andschedule[i]
are lists with lengths in range[1, 50]
.0 <= schedule[i].start < schedule[i].end <= 10^8
.
class Solution {
public:
vector<vector<int>> findCommonFreetime(vector<vector<vector<int>>>& mt) {
if (!mt.size()) return 0;
vector<pair<int, int>> data;
for (auto &a : mt) {
for(auto &b : a) {
data.push_back({b[0], 1});
data.push_back({b[1], -1});
}
}
sort(data.begin(), data.end());
int ct = 0, left = -1;
for (int i=0; i<data.size(); ++i) {
auto t = data[i];
if(t.second == 1) {
++ct;
if (ct == 1 && left != -1 && left < t.first) {
vector<int> temp;
temp.push_back(left);
temp.push_back(t.first);
res.push_back(temp);
left = -1;
}
else --ct;
if (ct==0) left = t.first;
}
return res;
}
}
No comments:
Post a Comment