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),仅使用了常数级别的额外空间。