- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Employee Free Time in C++
Suppose we have given a list of schedules of employees; this represents the working time for each employee. Now suppose each employee has a list of non-overlapping Intervals, these intervals are sorted. We have to find the list of finite intervals representing the common, positive-length free time for all employees, and that will also be in sorted order. We are representing Intervals in the form [x, y], For example, schedule [0][0].start = 1, schedule[0][0].end = 2.
So, if the input is like schedule = [[[1,2],[5,6]],[[1,3]],[[4,10]]], then one of the output will be [[3,4]].
To solve this, we will follow these steps −
Define one 2D array v
for initialize i := 0, when i < size of schedule, update (increase i by 1), do
for initialize j := 0, when j < size of schedule[i], update (increase j by 1), do
insert schedule[i, j] at the end of v
sort the array v
Define one 2D array ret
Define an array temp := v[0]
for initialize i := 0, when i < size of v, update (increase i by 1), do −
if temp[0] < v[i, 1], then −
insert {temp[1], v[i, 0]} at the end of ret
temp := v[i]
Otherwise
temp := (if temp[1] < v[i, 1], then v[i], otherwise temp)
return ret
Let us see the following implementation to get better understanding −
Example
#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: static bool cmp(vector<int> a, vector<int> b){ return a[0] < b[0]; } vector<vector<int>> employeeFreeTime(vector<vector<vector<int>>> schedule) { vector<vector<int>> v; for (int i = 0; i < schedule.size(); i++) { for (int j = 0; j < schedule[i].size(); j++) { v.push_back(schedule[i][j]); } } sort(v.begin(), v.end(), cmp); vector<vector<int>> ret; vector<int> temp = v[0]; for (int i = 0; i < v.size(); i++) { if (temp[0] < v[i][1]) { ret.push_back({temp[1], v[i][0]}); temp = v[i]; } else { temp = temp[1] < v[i][1] ? v[i] : temp; } } return ret; } }; main(){ Solution ob; vector<vector<vector<int>>> v = {{{1,2},{5,6}},{{1,3}},{{4,10}}}; print_vector(ob.employeeFreeTime(v)); }
Input
{{{1,2},{5,6}},{{1,3}},{{4,10}}}
Output
[[2, 1, ],[2, 1, ],[3, 4, ],[10, 5, ],]