C ++中的员工空闲时间
假设我们给出了一个员工时间表。这代表每个员工的工作时间。现在,假设每个员工都有一个不重叠的时间间隔列表,这些时间间隔将被排序。我们必须找到一个有限间隔的列表,该列表代表所有员工的共同的,正长度的空闲时间,并且这也将按照排序的顺序进行。我们以[x,y]的形式表示间隔,例如,时间表[0][0].start=1,时间表[0][0].end=2。
因此,如果输入类似于schedule=[[[[1,2],[5,6]],[[1,3]],[[4,10]]],则输出之一将是[[3,4]]。
为了解决这个问题,我们将遵循以下步骤-
定义一个2D数组v
对于初始化i:=0,当i<计划大小时,更新(将i增加1),执行
在v的末尾插入schedule[i,j]
对于初始化j:=0,当j<schedule[i]的大小时,更新(将j增加1),执行
对数组v排序
定义一个2D阵列ret
定义一个数组temp:=v[0]
对于初始化i:=0,当i<v的大小时,更新(将i增加1),执行-
temp:=(如果temp[1]<v[i,1],则v[i],否则temp)
在ret的末尾插入{temp[1],v[i,0]}
temp:=v[i]
如果temp[0]<v[i,1],则-
除此以外
返回ret
让我们看下面的实现以更好地理解-
示例
#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)); }
输入值
{{{1,2},{5,6}},{{1,3}},{{4,10}}}
输出结果
[[2, 1, ],[2, 1, ],[3, 4, ],[10, 5, ],]