给定 n
个整数,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
示例 1:
输入: [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]。
思路:
滑动窗口
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
double res=-65536;
int len=nums.size();
double sum=0;
int left=0,right=k-1;
for(int i=left;i<left+k;i++)
{
sum+=nums[i];
}
res=sum/k;
left++;
right++;
while(right<len)
{
sum=sum-nums[left-1]+nums[right];
double arv=sum/k;
res=max(res,arv);
left++;
right++;
}
return res;
}
};
累加数组
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int n = nums.size();
vector<int> sums = nums;
for (int i = 1; i < n; ++i) {
sums[i] = sums[i - 1] + nums[i];
}
double mx = sums[k - 1];
for (int i = k; i < n; ++i) {
mx = max(mx, (double)sums[i] - sums[i - k]);
}
return mx / k;
}
};