Saturday, April 24, 2021

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 timefor all employees, also in sorted order.

(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 = 1schedule[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.

 

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]]

 

Constraints:

  • 1 <= schedule.length , schedule[i].length <= 50
  • 0 <= schedule[i].start < schedule[i].end <= 10^8


/*
// Definition for an Interval.
class Interval {
public:
    int start;
    int end;

    Interval() {}

    Interval(int _start, int _end) {
        start = _start;
        end = _end;
    }
};
*/
struct comp {
    bool operator()(Interval& first, Interval& second) {
        return first.start > second.start;
    }
};

class Solution {
public:
    vector<Interval> employeeFreeTime(vector<vector<Interval>> schedule) {
        vector<Interval> ans;
        priority_queue<Interval, vector<Interval>, comp> pq;
        
        for (auto sch : schedule) {
            for (auto sc : sch) {
                pq.push(sc);
            }
        }
        
        int last_end = -1;
        while(!pq.empty()) {
            Interval it = pq.top(); pq.pop();
            if (last_end != -1 && it.start > last_end) {
                ans.push_back(Interval(last_end, it.start));
            }
            last_end = max(last_end, it.end);
        }
        return ans;
    }
};

/*   Another approach ==
class Solution {
public:
    vector<Interval> employeeFreeTime(vector<vector<Interval>> schedule) {
        vector<pair<int, int>> sched;
        for(int i=0; i< schedule.size(); i++)
        {
            for(int j=0; j< schedule[i].size(); j++)
            {
                sched.push_back({schedule[i][j].start, 1});
                sched.push_back({schedule[i][j].end,-1});
            }   
        }
        sort(sched.begin(), sched.end());
        vector<Interval> res;
        int bal=0,prev=-1;
        for(int i=0; i<sched.size(); i++)
        {
            if(prev!=-1 && bal ==0 && prev != sched[i].first)
            {
                res.push_back({prev, sched[i].first});
            }
            bal+= sched[i].second;
            prev = sched[i].first;
        }
        return res;
    }
};

*/

No comments:

Post a Comment