Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวกำหนดตารางเวลาการประชุมใน C++


สมมติว่าเรามีช่วงเวลาว่างแสดงรายการ slot1 และ slots2 ของคนสองคนและระยะเวลาการประชุม d เราต้องหา time slot ที่เร็วที่สุดที่ใช้ได้สำหรับทั้งคู่และเป็นระยะเวลา d หากไม่มีช่วงเวลาทั่วไปที่ตรงตามข้อกำหนด ให้แสดงอาร์เรย์ว่าง ที่นี่ รูปแบบของช่วงเวลาคืออาร์เรย์ของสององค์ประกอบ [เริ่มต้น, สิ้นสุด] ซึ่งแสดงถึงช่วงเวลาที่รวมตั้งแต่ต้นจนจบ เราสามารถสรุปได้ว่าไม่มีช่องว่างสองช่องของบุคคลคนเดียวกันตัดกัน นั่นคือสำหรับช่วงเวลาสองช่วง [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
  • ในขณะที่ฉัน <ขนาดของ s1 และ j <ขนาดของ s2
    • end :=นาทีของ s1[i, 1] และ s2[j, 1]
    • เริ่ม :=นาทีของ s1[i, 0] และ s2[j, 0]
    • ถ้าสิ้นสุด – เริ่ม>=ระยะเวลา แล้ว
      • แทรก start และ (start + Duration) ลงใน ans array แล้วคืนค่า ans
    • มิฉะนั้น เมื่อ 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, ]