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