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