Problem: 643. 子数组最大平均数 I
文章目录
- 思路
- 解题过程
- Code
思路
滑动窗口–模版详解(同定长和不定长)
解题过程
- 滑动窗口题目模版,为代码形式上的简洁性,要求每个循环进入时,r 指针都一定指向一个 当前需要被纳入窗口的元素。
- 对于定长滑动窗口。初始时 l=0, r=k-1,需要在预处理时处理前 k-1 个元素 [0, k -2];在进入循环时,将 r 指向元素纳入窗口,即第 k 个元素。之后窗口满足长度为 k 的要求,即可处理窗口条件。这样做的好处理预处理之后窗口长度还未到 k 的长度,不需要在外面特别处理窗口条件,非常方便。
- 对于不定长滑动窗口。初始时 l=0, r=0,根本不需要进行预处理;直接进入循环,在将 r 指向元素纳入窗口后处理窗口条件,非常方便。
Code
class Solution {
public:double findMaxAverage(vector<int>& nums, int k) {int l = 0, r = k - 1;double sum = 0, res = INT_MIN;for(int i = l; i < r; i++) {sum += nums[i];}while(r < nums.size()) {sum += nums[r];res = max(res, sum / k);sum -= nums[l];l++, r++;}return res;}
};