ধরুন মিটিং সময়ের ব্যবধানের একটি অ্যারে আছে। এখানে দুইবার শুরু এবং শেষের সময় রয়েছে[[s1,e1],[s2,e2],...] এবং প্রতিটি জোড়া নিয়মটি সন্তুষ্ট করে (si
সুতরাং, যদি ইনপুটটি [[0, 30], [5, 10], [15, 20]] এর মত হয়, তাহলে আউটপুট হবে 2।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি অগ্রাধিকার সারি pq
সংজ্ঞায়িত করুন -
ব্যবধান অ্যারে সাজান
-
ret :=0
-
আরম্ভ করার জন্য i :=0, যখন i <ব্যবধানের আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −
-
যখন (pq খালি নয় এবং pq <=ব্যবধান[i, 0] এর শীর্ষ উপাদান), −
-
pq
থেকে উপাদান মুছুন
-
-
pq
-এ ব্যবধান [i] সন্নিবেশ করান -
ret :=সর্বোচ্চ 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