2090. 半径为 k 的子数组平均值(滑动窗口)
2090. 半径为 k 的子数组平均值(滑动窗口)
### 滑动窗口定义
什么是滑动窗口,顾名思义就是一个窗户在滑动嘛,窗户的特点有什么?宽度这些特征是不会变化的,只有它的位置时刻变化,但是中间一部分的位置是前面一部分原来的位置。知道了这些特征,我们在算法运用中可以怎么使用呢?**比如:一段长度固定的子数组的值,这个子数组一开始最左坐标为0,它一直运动,知道最右坐标到顶,求这个子数组在运动过程中的所有值。** 这个时候会不会感觉这个子数组就是个窗户了。
### 真题讲解

#### 审题
可以知道这个子数组长度固定,且关键需要得到子数组和。**(符合滑动窗口使用)**
#### 解题思路
1、求子数组和
2、求子数组均值
3、子数组右移,减去最右值,加上最左值
**注意:求得的均值为子数组中心点坐标对应的值,其它均为-1**
#### 代码
思路清晰,可谓是万事俱备只欠“代码”了
```c++
class Solution {
public:
vector<int> getAverages(vector<int>& nums, int k) {
vector<int>ans;
long long sum=0;
int l=0;
int r=2*k;
int n=nums.size();
for(int i=0;i<1+2*k&&i<nums.size();i++)sum+=nums[i];
for(int i=0;i<n;i++){
if(i-k<0||i+k>=nums.size())ans.push_back(-1);
else{
ans.push_back(sum/(1+2*k));
sum-=nums[l++]-nums[r+1<n?++r:r];
}
}
return ans;
}
};
```
结果那必是通过了,如果你们有更简单方法也可以尝试!

#### 完结撒花
滑动窗口就那么轻松学会了。我的力扣主页:[https://leetcode.cn/u/nan-wan-bu-qiu-39/](https://leetcode.cn/u/nan-wan-bu-qiu-39/)
更多算法内容:[https://data.zdw666.fun/api/documents/sort?sortId=10](https://data.zdw666.fun/api/documents/sort?sortId=10)