题目链接:https://leetcode-cn.com/problems/maximum-average-subarray-i/
难度简单150
给定 n
个整数,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
示例:
输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
提示:
- 1 <=
k
<=n
<= 30,000。 - 所给数据范围 [-10,000,10,000]。
解法
这是一道简单题,确实分分钟自己做出来了,还是滑动窗口,而且滑动窗口不需要扩大只需要滑动,维护一个sum值就可以了。
需要稍微注意的是每次窗口滑动后,
我们枚举的是right 从 right=k开始,然后上一个需要删除的left的index是 right-k
很快嘛 这样就AC了
看了一下官方题解和自己想的差不多,果然简单题俺重拾信心,继续复习一下昨天题目的双堆
2021年2月3日每日一题题目:https://leetcode-cn.com/problems/sliding-window-median/
然后写个blog记录一下。
代码
double findMaxAverage(vector<int>& nums, int k) {
int sum=0;
for(int i=0;i<k;i++){
sum+=nums[i];
}
double res=(double)sum/k;
double t;
for(int i=k;i<nums.size();i++){ //枚举right
//要删除的left
sum-=nums[i-k];
sum+=nums[i]; //新加上的right
t =(double)sum/k;
if(t>res){
res=t;
}
}
return res;
}