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

Lập lịch cuộc họp trong C ++

Giả sử chúng ta có các khe thời gian khả dụng liệt kê các khe1 và slot2 của hai người và thời lượng cuộc họp d, chúng tôi phải tìm khe thời gian sớm nhất phù hợp với cả hai người và có thời lượng là d. Nếu không có khe thời gian chung nào đáp ứng các yêu cầu, thì hiển thị một mảng trống. Ở đây, định dạng của một khe thời gian là một mảng gồm hai phần tử [bắt đầu, kết thúc] đại diện cho một phạm vi thời gian bao gồm từ đầu đến cuối. chúng ta có thể giả định rằng không có hai vị trí khả dụng của cùng một người giao nhau. Có nghĩa là, đối với hai khe thời gian bất kỳ [s1, e1] và [s2, e2] của cùng một người, hoặc s1> e2 hoặc s2> e. Vì vậy, nếu đầu vào giống như s1 =[[10,50], [60,120], [140,210]] và s2 =[[0,15], [60,70]] và thời lượng =8, thì đầu ra sẽ là [ 60,68].

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

  • i:=0 và j:=0, tạo một mảng ans, sắp xếp s1 và s2.
  • while i
  • end:=min of s1 [i, 1] and s2 [j, 1]
  • start:=min of s1 [i, 0] and s2 [j, 0]
  • nếu kết thúc - bắt đầu> =thời lượng, thì
    • chèn start và (start + thời lượng) vào mảng ans và trả về ans.
  • ngược lại khi s1 [i, 1]
  • nếu không thì hãy tăng j lên 1
  • trả lại ans
  • 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<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    using namespace std;
    bool cmp(vector <int> a, vector <int> b){
       return a[0]<b[0];
    }
    class Solution {
       public:
       vector<int> minAvailableDuration(vector<vector<int>>& slots1, vector<vector<int>>& slots2, int duration) {
          int i =0;
          int j = 0;
          vector <int> ans;
          sort(slots1.begin(),slots1.end(),cmp);
          sort(slots2.begin(),slots2.end(),cmp);
          while(i<slots1.size() && j<slots2.size()){
             int end = min(slots1[i][1],slots2[j][1]);
             int start = max(slots1[i][0],slots2[j][0]);
             if(end-start>=duration){
                ans.push_back(start);
                ans.push_back(start+duration);
                return ans;
             } else if(slots1[i][1]<slots2[j][1]) {
                i++;
             } else {
             j++;}
          }
          return ans;
       }
    };
    main(){
       vector<vector<int>> v = {{10,50},{60,120},{140,210}};
       vector<vector<int>> v1 = {{0,15},{60,70}};
       Solution ob;
       print_vector(ob.minAvailableDuration(v, v1, 8));
    }

    Đầu vào

    [[10,50],[60,120],[140,210]]
    [[0,15],[60,70]]
    8

    Đầu ra

    [60, 68, ]