দুজন ব্যক্তির উপলব্ধ টাইম স্লট slots1 ও slots2 এবং মিটিং ডিউরেশন d দেওয়া। উভয়ের জন্য কাজ করে এমন সবচেয়ে 이른 টাইম স্লট খুঁজে বের করতে হবে।
উদাহরণ: slots1=[[10,50],[60,120],[140,210]], slots2=[[0,15],[60,70]], d=8 → [60,68]।
সমাধানের ধাপসমূহ
- দুই লিস্টকে শুরুর সময় অনুযায়ী সাজান।
- দুটি পয়েন্টার
i, jদিয়ে ট্রাভার্স করুন। - ওভারল্যাপিং ইন্টারভাল =
[max(s1[i].start, s2[j].start), min(s1[i].end, s2[j].end)]। - যদি দৈর্ঘ্য >= d হয়,
[start, start+d]রিটার্ন করুন। - অন্যথায় যেটির এন্ড ছোট সেটি আগ্রে বাড়ান।
C++ উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v) {
cout << "[";
for (int x : v) cout << x << ", ";
cout << "]" << endl;
}
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) {
sort(slots1.begin(), slots1.end(), cmp);
sort(slots2.begin(), slots2.end(), cmp);
int i = 0, j = 0;
while (i < slots1.size() && j < slots2.size()) {
int start = max(slots1[i][0], slots2[j][0]);
int end = min(slots1[i][1], slots2[j][1]);
if (end - start >= duration) return {start, start + duration};
if (slots1[i][1] < slots2[j][1]) i++; else j++;
}
return {};
}
};
int 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, ]