मान लीजिए कि हमारे पास 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