C ++会议安排程序

假设我们有两个人的可用时隙列表slot1和slot2,并且会议持续时间为d,我们必须找到适用于他们两个人的最早时隙,其持续时间为d。如果没有满足要求的通用时隙,则显示一个空数组。此处的时隙格式是由两个元素组成的数组[start,end],表示从开始到结束的整个时间范围。我们可以假设,同一个人的两个可用性空缺彼此不相交。也就是说,对于同一个人的任何两个时隙[s1,e1]和[s2,e2],s1> e2或s2> e。因此,如果输入类似于s1 = [[10,50],[60,120],[140,210]]和s2 = [[0,15],[60,70]]且持续时间= 8,则输出将为[ 60,68]。

为了解决这个问题,我们将遵循以下步骤-

  • i:= 0和j:= 0,建立一个数组ans,对s1和s2进行排序。

  • 而i <s1的大小和j <s2的大小

    • 将start和(start + duration)插入ans数组,然后返回ans。

    • end:= s1 [i,1]和s2 [j,1]的最小值

    • 开始:= s1 [i,0]和s2 [j,0]的最小值

    • 如果结束–开始> =持续时间,则

    • 否则,当s1 [i,1] <s2 [j,1]时,将i增加1

    • 否则将j增加1

    • 返回ans

    让我们看下面的实现以更好地理解-

    示例

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

    输入值

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

    输出结果

    [60, 68, ]