কম্পিউটার

C++ প্রোগ্রাম প্রতিটি k আকারের সংলগ্ন সাবয়ারের সর্বাধিক সন্ধান করতে


ধরুন আমাদের n উপাদান সহ একটি অ্যারে এবং একটি মান k আছে। k.

আকারের প্রতিটি সংলগ্ন সাবয়ারের জন্য আমাদের সর্বোচ্চ মান খুঁজে বের করতে হবে

সুতরাং, যদি ইনপুটটি arr =[3,4,6,2,8], k =3 এর মত হয়, তাহলে আউটপুট হবে 3 আকারের সংলগ্ন সাবয়ারেগুলি হল [3,4,6], [4,6, 2], [6,2,8], তাই সর্বাধিক উপাদান হল 6, 6 এবং 8৷

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • কি আকারের একটি deque Qi সংজ্ঞায়িত করুন
  • আরম্ভ করার জন্য i :=0, যখন i
  • যখন Qi খালি না থাকে এবং arr[i]>=arr[Qi-এর শেষ উপাদান], কর:
    • কিউই থেকে শেষ উপাদান মুছুন
  • Qi-এর শেষে i ঢোকান
  • এর জন্য i
  • Arr[Qi এর প্রথম উপাদান]
  • প্রদর্শন করুন
  • যখন Qi খালি নয় এবং Qi এর প্রথম উপাদান <=i - k, do:
    • Qi থেকে সামনের উপাদান মুছুন
  • যখন Qi খালি না থাকে এবং arr[i]>=arr[Qi-এর শেষ উপাদান], কর:
    • কিউই থেকে শেষ উপাদান মুছুন
  • Qi-এর শেষে i ঢোকান
  • Arr[Qi এর প্রথম উপাদান]
  • প্রদর্শন করুন

    উদাহরণ

    আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    #include <iostream>
    #include <vector>
    #include <deque>
    using namespace std;
    int main(){
       vector<int> arr = {3,4,6,2,8};
       int k = 3;
       deque<int> Qi(k);
       int i;
       for (i = 0; i < k; ++i){
          while ( (!Qi.empty()) && arr[i] >= arr[Qi.back()])
             Qi.pop_back();
    
             Qi.push_back(i);
         }
         for ( ; i < arr.size(); ++i){
            cout << arr[Qi.front()] << " ";
            while ( (!Qi.empty()) && Qi.front() <= i - k)
                Qi.pop_front();
            while ( (!Qi.empty()) && arr[i] >= arr[Qi.back()])
                Qi.pop_back();
            Qi.push_back(i);
        }
        cout << arr[Qi.front()] << endl;
    }
    

    ইনপুট

    {3,4,6,2,8}, 3

    আউটপুট

    6 6 8

    1. GCD খুঁজে পেতে C++ প্রোগ্রাম

    2. পাইথনে একটি ভাল সাবয়ারের সর্বাধিক স্কোর খুঁজে বের করার প্রোগ্রাম

    3. পাইথনে সর্বাধিক সাব্যারে মিন-প্রোডাক্ট খোঁজার প্রোগ্রাম

    4. পাইথনে সংলগ্ন সাবয়ারের সর্বাধিক পণ্য খুঁজে বের করার প্রোগ্রাম