ধরুন আমাদের 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 ঢোকান
- যখন Qi খালি না থাকে এবং arr[i]>=arr[Qi-এর শেষ উপাদান], কর:
- 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