文章目录
- 题目描述
- 题解思路
- 题解代码
题目描述
题解思路
题目让我们求长度为k的子数组并且该子数组的平均值大于threshold,对于这题,我们可以考虑维护一个长度为k的窗口,窗口不断向右滑动,遍历所有长度为k的子数组,我们计算窗口内的平均数如果大于等于阈值threshold则结果数加一,而计算窗口内的平均数可以通过窗口内的和除以k得到,所以对于窗口来说,我们只需要维护窗口内所有元素的和即可
题解代码
class Solution:
def numOfSubarrays(self, arr: List[int], k: int, threshold: int) -> int:
n = len(arr)
if n < k:
return 0
# 维护长度为k的窗口和
s = sum(arr[:k])
# 满足条件的个数
ans = 0
if s // k >= threshold:
# 窗口内元素的平均值大于等于阈值,增加答案
ans = 1
for i in range(k, n):
# 当前数字加入窗口,窗口最左侧的数字移出窗口
s += arr[i] - arr[i-k]
if s // k >= threshold:
# 窗口内元素的平均值大于等于阈值,则增加答案
ans += 1
return ans