1343. 大小为 K 且平均值大于等于阈值的子数组数目
给你一个整数数组
arr和两个整数k和threshold。请你返回长度为
k且平均值大于等于threshold的子数组数目。示例 1:
输入:arr = [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 。其他长度为 3 的子数组的平均值都小于 4 (threshold 的值)。示例 2:
输入:arr = [11,13,17,23,29,31,7,5,2,3], k = 3, threshold = 5输出:6解释:前 6 个长度为 3 的子数组平均值都大于 5 。注意平均值不是整数。
这道题是对于滑动定窗口为k个的平均值大于等于threshold的计数进行++;由于计算除法需要考虑截断,直接使用sum与k*threashold来进行比较
class Solution { public: int numOfSubarrays(vector<int>& arr, int k, int threshold) { int sum = 0, res = 0; int left = 0, right = 0, n = arr.size(); while(right < n) { sum += arr[right]; // 入窗口 if(right < k-1) // 对窗口不满进行判断跳出 { right++; continue; } if(sum >= k * threshold) // 维护计数 res++; sum -= arr[left]; // 出窗口 right++,left++; } return res; } };