643. 子数组最大平均数 I
给定 n
个整数,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
示例 1:
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-average-subarray-i
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
注意:
- 1 <=
k
<=n
<= 30,000。 - 所给数据范围 [-10,000,10,000]。
思路
假设前k个是最大的,保持k的滑动窗口,窗口后面每加一个,前面就减一个,取K个连续数的最大值,最后再除以K。
代码
class Solution {
public:
//这个方法超时
// double findMaxAverage(vector<int>& nums, int k) {
// double sum_max=(-1)*DBL_MAX;
// for(int i=0;i<=nums.size()-k;i++)
// {
// double sum=0.0;
// for(int j=i;j<i+k;j++)
// {
// sum+=nums[j];
// }
// sum_max=max(sum,sum_max);
// // sum_max=sum;
// }
// return sum_max*1.0/k;
// }
double findMaxAverage(vector<int>& nums, int k) {
int res=0;
for(int i=0;i<k;i++){
res+=nums[i];
}
int temp=res;
for(int i=k;i<nums.size();i++)
{
temp=temp-nums[i-k]+nums[i];
res=max(res,temp);
}
return res*1.0/k;
}
};