Giả sử chúng ta có một mảng các số nguyên arr và hai số nguyên k và ngưỡng. Chúng ta phải tìm số mảng con có kích thước k và trung bình lớn hơn hoặc bằng ngưỡng. Vì vậy, nếu đầu vào là:[2,2,2,2,5,5,5,8] và k =3 và ngưỡng =4, thì đầu ra sẽ là 3. Bởi vì các mảng con [2,5,5] , [5,5,5] và [5,5,8] có giá trị trung bình lần lượt là 4, 5 và 6.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
sum:=0, div:=k và n:=số phần tử trong mảng
-
set sum:=tổng tất cả các phần tử của arr
-
ret:=0
-
đối với i:=0 và j trong phạm vi k đến n - 1, hãy tăng cả i và j lên 1
-
nếu sum / div> =ngưỡng, sau đó tăng res lên 1
-
giảm tổng của arr [i]
-
tăng tổng bằng arr [j]
-
-
nếu sum / div> =ngưỡng, sau đó tăng ret lên 1
-
trả lại ret.
Ví dụ (C ++)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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));
} Đầu vào
[2,2,2,2,5,5,5,8] 3 4
Đầu ra
3