मान लीजिए कि हमारे पास arr पूर्णांकों की एक सरणी है और दो पूर्णांक k और थ्रेशोल्ड हैं। हमें k आकार के उप-सरणियों की संख्या और थ्रेशोल्ड से अधिक या उसके बराबर औसत का पता लगाना है। तो अगर इनपुट इस तरह है:[2,2,2,2,5,5,5,8] और के =3 और थ्रेशोल्ड =4, तो आउटपुट 3 होगा। क्योंकि उप-सरणी [2,5,5] , [5,5,5] और [5,5,8] का औसत क्रमशः 4, 5 और 6 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
योग:=0, डिव:=के और एन:=सरणी में तत्वों की संख्या
-
सेट योग :=गिरफ्तारी के सभी तत्वों का योग
-
रिट:=0
-
i :=0 और j के लिए k से n-1 की सीमा में, i और j दोनों को 1 से बढ़ाएं
-
अगर योग / div>=थ्रेशोल्ड, तो रेस को 1 से बढ़ा दें
-
गिरफ्तारी से राशि घटाएं[i]
-
गिरफ्तारी द्वारा राशि बढ़ाएं[j]
-
-
अगर योग / div>=थ्रेशोल्ड, तो रिट को 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