ধরা যাক কর্মচারীদের একটি শিডিউল লিস্ট দেওয়া আছে; এটি প্রতিটি কর্মচারীর কাজের 시간을 রিপ্রেজেন্ট করে। এখন ধরা যাক প্রতিটি কর্মচারীর নন-ওভারল্যাপিং ইন্টারভালের একটি লিস্ট আছে, এই ইন্টারভালগুলো সর্টেড। আমাদের সব কর্মচারীদের জন্য কমন, পজিটিভ-দৈর্ঘ্যের ফ্রি টাইম রিপ্রেজেন্ট করার ফিনাইট ইন্টারভালের লিস্ট খুঁজে বের করতে হবে, এবং সেটিও সর্টেড অর্ডারে। আমরা ইন্টারভালগুলোক [x, y] ফর্মে রিপ্রেজেন্ট করছি, উদাহরণস্বরূপ, schedule[0][0].start = 1, schedule[0][0].end = 2।
তাই, যদি ইনপুট schedule = [[[1,2],[5,6]],[[1,3]],[[4,10]]] হয়, তবে আউটপুটের একটি হবে [[3,4]]।
এটি সমাধান করতে, আমরা নিচের ধাপগুলো অনুসরণ করব -
একটি 2D অ্যারে v ডিফাইন করুন
i := 0 থেকে শুরু করুন, যখন i < schedule-এর আকার, (i ১ করে বাড়ান), করুন
j := 0 থেকে শুরু করুন, যখন j < schedule[i]-এর আকার, (j ১ করে বাড়ান), করুন
schedule[i, j] v-এর শেষে ইনসার্ট করুন
অ্যারে v সর্ট করুন
একটি 2D অ্যারে ret ডিফাইন করুন
একটি অ্যারে temp := v[0] ডিফাইন করুন
i := 0 থেকে শুরু করুন, যখন i < v-এর আকার, (i ১ করে বাড়ান), করুন -
যদি temp[0] < v[i, 1], তবে -
{temp[1], v[i, 0]} ret-এর শেষে ইনসার্ট করুন
temp := v[i]
অন্যথায়
temp := (যদি temp[1] < v[i, 1], তবে v[i], অন্যথায় temp)
ret রিটার্ন করুন
বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন -
উদাহরণ
#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: static bool cmp(vector<int> a, vector<int> b){ return a[0] < b[0]; } vector<vector<int>> employeeFreeTime(vector<vector<vector<int>>> schedule) { vector<vector<int>> v; for (int i = 0; i < schedule.size(); i++) { for (int j = 0; j < schedule[i].size(); j++) { v.push_back(schedule[i][j]); } } sort(v.begin(), v.end(), cmp); vector<vector<int>> ret; vector<int> temp = v[0]; for (int i = 0; i < v.size(); i++) { if (temp[0] < v[i][1]) { ret.push_back({temp[1], v[i][0]}); temp = v[i]; } else { temp = temp[1] < v[i][1] ? v[i] : temp; } } return ret; } }; main(){ Solution ob; vector<vector<vector<int>>> v = {{{1,2},{5,6}},{{1,3}},{{4,10}}}; print_vector(ob.employeeFreeTime(v)); }
ইনপুট
{{{1,2},{5,6}},{{1,3}},{{4,10}}}
আউটপুট
[[2, 1, ],[2, 1, ],[3, 4, ],[10, 5, ],]