给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。
滑动窗口解决该问题。
代码1(没考虑小于0的输入,错误版本):
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
double ans = 0;
double sum = 0;
for(int i = 0; i < nums.size(); i++){
sum += nums[i];
if(i < k - 1){
continue;
}
ans = max(ans, sum / k);
sum -= nums[i - k + 1];
}
return ans;
}
};
时间复杂度:O(n)
空间复杂度:O(1)
代码2(以为DBL_MIN是Double类型的最小值,错误版本):
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
double ans = DBL_MIN;
double sum = 0;
for(int i = 0; i < nums.size(); i++){
sum += nums[i];
if(i < k - 1){
continue;
}
ans = max(ans, sum / k);
sum -= nums[i - k + 1];
}
return ans;
}
};
时间复杂度:O(n)
空间复杂度:O(1)
Double类型的最小值可以表示为 -DBL_MAX;DBL_MIN是最小正值(2.225 ×10−308),大于0
代码3(正确版本):
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
double ans = -DBL_MAX;
double sum = 0;
for(int i = 0; i < nums.size(); i++){
sum += nums[i];
if(i < k - 1){
continue;
}
ans = max(ans, sum / k);
sum -= nums[i - k + 1];
}
return ans;
}
};
时间复杂度:O(n)
空间复杂度:O(1)