092c3f51831e422ead89e06101ad7c9f.png
【链接】:643. 子数组最大平均数 I

class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int maxSum = INT_MIN, curSum = 0;
for(int l = 0, r = 0; r < nums.size(); ++r) {
curSum += nums[r]; // 更新curSum
if(r - l + 1 == k) {
maxSum = max(maxSum, curSum); // 更新maxSum(因为题目要求长度为k,所以需要在这里更新maxSum)
curSum -= nums[l]; // 扣除左侧元素(保持一致)
++l; // 左侧元素离开
}
}
return maxSum / (double)k;
}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

题目关键字:连续子数组,说明可以采用滑动窗口。
maxSum的初始值:因为数组内有负数,maxSum的初始值不应该设置成0,应该设置为int的最小值。
更新的位置:因为题目说明长度必须要为k,所以更新的位置应该在if里边,长度为k时才进行更新。