สมมติว่าเรามีอาร์เรย์ของจำนวนเต็ม arr และจำนวนเต็มสองจำนวน 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 ตามลำดับ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
sum :=0, div :=k และ n :=จำนวนองค์ประกอบในอาร์เรย์
-
set sum :=ผลรวมขององค์ประกอบทั้งหมดของ arr
-
ยกเลิก :=0
-
สำหรับ i :=0 และ j ในช่วง k ถึง n – 1 ให้เพิ่มทั้ง i และ j ขึ้น 1
-
ถ้า sum / div>=threshold ให้เพิ่มความละเอียดขึ้น 1
-
ลดผลรวมโดย arr[i]
-
เพิ่มผลรวมโดย arr[j]
-
-
ถ้า sum / div>=threshold ให้เพิ่ม 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