
1.TLE
class Solution {
public:
// 返回集合所有元素的和
double sum(queue<double> q)
{
double res = 0;
while(q.size())
{
res += q.front();
q.pop();
}
return res;
}
double findMaxAverage(vector<int>& nums, int k) {
// 滑动窗口
int n = nums.size();
if(n == 1) return nums[0] / k;
queue<double> q;
double res = 0;
for(int i = 0; i < n; i++)
{
// 超出范围
if(i >= k) q.pop();
q.push(nums[i]);
if(q.size() == k) res = max(res, sum(q));
}
return res / k;
}
};
2.前缀和
class Solution {
public:
static const int N = 1e5 + 10;
int s[N];
double findMaxAverage(vector<int>& nums, int k) {
// 特殊情况
int n = nums.size();
if(n == 1) return (double) nums[0] / k;
// 前缀和
s[0] = 0;
for(int i = 1; i <= n; i++)
{
s[i] = s[i - 1] + nums[i - 1];
}
int sum = -2e9;
for(int i = k, j = 0; i <= n; i++, j++)
{
sum = max(sum, s[i] - s[j]);
}
return (double) sum / k;
}
};