643. 子数组最大平均数 I - 力扣(LeetCode)
可以使用滑动窗口(Sliding Window)的方法来解决这个问题。具体步骤如下:
- 先计算数组
nums
中前k
个元素的和sum_k
,作为初始窗口的和。 - 然后滑动窗口,每次去掉窗口最左侧的元素,并加入新的元素,更新
sum_k
。 - 维护
max_sum
变量,记录所有窗口的最大和。 - 最后返回
max_sum / k
作为最大平均数。
代码实现如下:
def findMaxAverage(nums, k):
# 计算初始窗口的和
max_sum = sum_k = sum(nums[:k])
# 滑动窗口遍历数组
for i in range(k, len(nums)):
sum_k += nums[i] - nums[i - k] # 移动窗口
max_sum = max(max_sum, sum_k) # 更新最大和
return max_sum / k # 返回最大平均数
示例:
nums = [1,12,-5,-6,50,3]
k = 4
print(findMaxAverage(nums, k)) # 输出 12.75
复杂度分析:
- 时间复杂度:O(n),其中 n 是数组长度,我们只需遍历数组一次。
- 空间复杂度:O(1),仅使用了常数级别的额外空间。