9a7f8baf21f243779595bc6a89f043be.png
【题目】:1343. 大小为 K 且平均值大于等于阈值的子数组数目

class Solution {
public:
int numOfSubarrays(vector<int>& arr, int k, int threshold) {
int count = 0; // 计算满足条件的数
int curSum = 0; // 计算当前滑窗内的总数
int targetSum = k * threshold; // 当前滑窗内的总数满足条件的最小值
for(int l = 0, r = 0; r < arr.size(); ++r) {
curSum += arr[r];
if(r - l + 1 == k) { // 条件1. 长度为k
if(curSum >= targetSum) { // 条件2. 平均值大于等于threshold
++count;// 满足条件1和2
}
// 缩小窗口
curSum -= arr[l];
l++;
}
}
return count;
}
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

这题有两个条件,长度为k、平均值大于等于threshold。所以需要依次满足这两个条件后,才能更新count值。