题目概述
链接: link.
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例
输入:[1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
方法
*想法:首先看到这道题,需要注意到一个就是K个连续子数组,即是从k-n(数组长度)找到最大的值。本来想使用双循环遍历k-n位置的和,但是时间复杂度就太高了。所以选择先计算出前k个位置的和,从k个位置之后遍历相加当前元素,相减首元素。
代码
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int n = nums.size();
int sum = 0;
for(int i=0;i<k;i++)
{
sum += nums[i];
}
int maxn = sum;
for(int i=k;i<n;i++)
{
sum = sum - nums[i-k] + nums[i];
maxn = max(sum,maxn);
}
return (double)(maxn)/k;
}
};
结果
思考
对于那些固定的和其实没有必要每次都去计算,可以通过之前求解出来,在后边的循环中每次使用。