मान लीजिए कि हमारे पास उपलब्धता समय स्लॉट दो लोगों के स्लॉट 1 और स्लॉट 2 और एक मीटिंग अवधि डी है, हमें उन दोनों के लिए काम करने वाला सबसे पुराना समय स्लॉट ढूंढना है और अवधि डी है। यदि कोई सामान्य समय स्लॉट नहीं है जो आवश्यकताओं को पूरा करता है, तो एक खाली सरणी दिखाएं। यहां एक टाइम स्लॉट का प्रारूप दो तत्वों [प्रारंभ, अंत] की एक सरणी है जो प्रारंभ से अंत तक एक समावेशी समय सीमा का प्रतिनिधित्व करता है। हम यह मान सकते हैं कि एक ही व्यक्ति के दो उपलब्धता स्लॉट एक दूसरे के साथ प्रतिच्छेद नहीं करते हैं। अर्थात्, एक ही व्यक्ति के किन्हीं दो टाइम स्लॉट्स [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 का मिनट[i, 1] और s2[j, 1]
- प्रारंभ :=s1 का मिनट[i, 0] और s2[j, 0]
- यदि अंत - प्रारंभ>=अवधि, तो
- उत्तर सरणी में प्रारंभ और (प्रारंभ + अवधि) डालें, और उत्तर वापस करें।
- अन्यथा जब 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, ]