কম্পিউটার

C++-এ মিটিং রুম II


ধরুন মিটিং সময়ের ব্যবধানের একটি অ্যারে আছে। এখানে দুইবার শুরু এবং শেষের সময় রয়েছে[[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

  1. C++ এ রেখার প্রতিফলন

  2. C++ এ ডায়াগোনাল ট্রাভার্স II

  3. C++ এ কিল প্রসেস

  4. C++ এ কাঠবিড়ালি সিমুলেশন