मान लीजिए कि बैठक के समय अंतराल की एक सरणी है। दो बार प्रारंभ और समाप्ति समय हैं [[s1,e1],[s2,e2],...] और प्रत्येक जोड़ी नियम को संतुष्ट करती है (si
इसलिए, अगर इनपुट [[0, 30], [5, 10], [15, 20]] जैसा है, तो आउटपुट 2 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक प्राथमिकता कतार pq परिभाषित करें
-
अंतराल सरणी को क्रमबद्ध करें
-
रिट:=0
-
इनिशियलाइज़ i :=0 के लिए, जब i <अंतराल का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -
-
जबकि (pq खाली नहीं है और pq का शीर्ष तत्व <=अंतराल [i, 0]), करते हैं -
-
pq से तत्व हटाएं
-
-
pq में अंतराल [i] डालें
-
ret :=अधिकतम रिट और pq का आकार
-
-
वापसी रिट
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; struct Comparator{ bool operator()(vector <int<& a, vector <int<& b){ return !(a[1] < b[1]); } }; class Solution { public: static bool cmp(vector <int< a, vector <int< b){ return (a[1] < b[1]); } int minMeetingRooms(vector<vector<int<>& intervals) { priority_queue<vector<int<, vector<vector<int< >, Comparator> pq; sort(intervals.begin(), intervals.end()); int ret = 0; for (int i = 0; i < intervals.size(); i++) { while (!pq.empty() && pq.top()[1] <= intervals[i][0]) pq.pop(); pq.push(intervals[i]); ret = max(ret, (int)pq.size()); } return ret; } }; main(){ vector<vector<int<> v = {{0, 30}, {5, 10}, {15, 20}}; Solution ob; cout << (ob.minMeetingRooms(v)); }
इनपुट
{{0, 30}, {5, 10}, {15, 20}}
आउटपुट
2