Computer >> Máy Tính >  >> Lập trình >> C ++

Thời gian rảnh của nhân viên trong C ++

Giả sử chúng ta đã đưa ra danh sách lịch làm việc của các nhân viên; điều này thể hiện thời gian làm việc của mỗi nhân viên. Bây giờ, giả sử mỗi nhân viên có một danh sách các Khoảng không trùng lặp, các khoảng này được sắp xếp. Chúng ta phải tìm danh sách các khoảng thời gian hữu hạn đại diện cho thời gian rảnh chung, dài dương cho tất cả nhân viên và đó cũng sẽ được sắp xếp theo thứ tự. Chúng tôi đang biểu diễn Khoảng ở dạng [x, y], Ví dụ:lập lịch [0] [0] .start =1, lập lịch [0] [0] .end =2.

Vì vậy, nếu đầu vào giống như lịch trình =[[[1,2], [5,6]], [[1,3]], [[4,10]]], thì một trong các đầu ra sẽ là [[ 3,4]].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một mảng 2D v

  • để khởi tạo i:=0, khi tôi

    • để khởi tạo j:=0, khi j

      • chèn lịch biểu [i, j] vào cuối v

  • sắp xếp mảng v

  • Xác định một mảng 2D ret

  • Xác định tạm thời mảng:=v [0]

  • để khởi tạo i:=0, khi i

    • nếu tạm thời [0]

      • chèn {temp [1], v [i, 0]} vào cuối ret

      • tạm thời:=v [i]

    • Nếu không

      • temp:=(nếu tạm thời [1]

  • trả lại ret

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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));
}

Đầu vào

{{{1,2},{5,6}},{{1,3}},{{4,10}}}

Đầu ra

[[2, 1, ],[2, 1, ],[3, 4, ],[10, 5, ],]