Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 회의 스케줄러

<시간/>

가용 시간 슬롯에 두 사람의 슬롯 1과 슬롯 2가 있고 회의 기간 d가 있다고 가정하면 두 사람 모두에게 작동하고 지속 시간이 d인 가장 빠른 시간 슬롯을 찾아야 합니다. 요구 사항을 충족하는 공통 시간 슬롯이 없으면 빈 배열을 표시합니다. 여기에서 시간 슬롯의 형식은 시작부터 끝까지 포함하는 시간 범위를 나타내는 두 요소 [start, end]의 배열입니다. 동일한 사람의 두 가용성 슬롯이 서로 교차하지 않는다고 가정할 수 있습니다. 즉, 동일한 사람의 두 시간 슬롯 [s1, e1] 및 [s2, e2]에 대해 s1> e2 또는 s2> e입니다. 따라서 입력이 s1 =[[10,50], [60,120], [140,210]] 및 s2 =[[0,15], [60,70]] 및 duration =8과 같으면 출력은 [ 60,68].

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • i :=0 및 j :=0, 하나의 배열을 ans로 만들고 s1과 s2를 정렬합니다.
  • i
  • end :=s1[i, 1] 및 s2[j, 1]의 최소값
  • 시작:=s1[i, 0] 및 s2[j, 0]의 최소값
  • 종료일 경우 시작>=기간인 경우
    • as 배열에 start 및 (start + duration)을 삽입하고 as를 반환합니다.
  • 그렇지 않으면 s1[i, 1]
  • 그렇지 않으면 j를 1만큼 증가
  • 반환
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    예시

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