ধরুন আমাদের কাছে পূর্ণসংখ্যার একটি অ্যারে এবং দুটি পূর্ণসংখ্যা k এবং থ্রেশহোল্ড রয়েছে। আমাদের k আকারের সাব-অ্যারের সংখ্যা খুঁজে বের করতে হবে এবং থ্রেশহোল্ডের চেয়ে বেশি বা সমান গড়। সুতরাং ইনপুট যদি হয়:[2,2,2,2,5,5,5,8] এবং k =3 এবং থ্রেশহোল্ড =4, তাহলে আউটপুট হবে 3। কারণ সাবয়ারে [2,5,5] , [5,5,5] এবং [5,5,8] এর গড় যথাক্রমে 4, 5 এবং 6।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
যোগফল :=0, div :=k এবং n :=অ্যারেতে উপাদানের সংখ্যা
-
সমষ্টি সেট করুন :=arr এর সমস্ত উপাদানের যোগফল
-
ret :=0
-
i এর জন্য :=0 এবং j রেঞ্জ k থেকে n – 1, i এবং j উভয়কে 1 দ্বারা বাড়ান
-
যদি যোগফল / div>=থ্রেশহোল্ড হয়, তাহলে রেস 1 দ্বারা বৃদ্ধি করুন
-
arr[i]
দ্বারা যোগফল হ্রাস করুন -
arr[j>
দ্বারা যোগফল বাড়ান
-
-
যদি যোগফল / div>=থ্রেশহোল্ড হয়, তাহলে ret 1 দ্বারা বাড়ান
-
রিটার্ন রিটার্ন।
উদাহরণ (C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#include <bits/stdc++.h> using namespace std; class Solution { public: int numOfSubarrays(vector<int>& arr, int k, int threshold) { double sum = 0; double div = k; int n = arr.size(); for(int i = 0; i < k; i++){ sum += arr[i]; } int ret = 0; for(int i = 0, j = k; j < n; i ++, j++){ if(sum / div >= threshold ){ ret++; } sum -= arr[i]; sum += arr[j]; } if(sum / div >= threshold ){ ret++; } return ret; } }; main(){ vector<int> v = {2,2,2,2,5,5,5,8}; Solution ob; cout << (ob.numOfSubarrays(v, 3, 4)); }
ইনপুট
[2,2,2,2,5,5,5,8] 3 4
আউটপুট
3