题目描述
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
C++
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
/*
//这个暴力会超时,因为会有很多值重复计算
int sum=0; //初始化
vector<double> a;
for(int i=0;i<=nums.size()-k;i++)
{ sum=nums[i];
for(int j=1;j<=k-1;j++){
sum+=nums[i+j];
}
double avg=double(sum)/(double)k;
a.push_back(avg);
}
return *max_element(a.begin(),a.end());
*/
//使用滑动窗口的思路
int sum=0;
vector<double> a;
for(int i=0;i<k;i++){
sum+=nums[i];
}
double avg=double(sum)/(double)k;
a.push_back(avg);
for(int j=k;j<nums.size();j++){
sum=sum+nums[j]-nums[j-k]; //类似滑动窗口,向前进一
double avg=double(sum)/(double)k;
a.push_back(avg);
}
return *max_element(a.begin(),a.end());
}
};
该博客讨论了如何在C++中使用滑动窗口算法有效地找到一个整数数组中长度为k的最大平均数连续子数组。代码示例展示了如何避免暴力求解导致的时间复杂度过高,转而采用优化的方法来提高效率。
346

被折叠的 条评论
为什么被折叠?



