题目描述
题目来源
题目解析
滑动窗口
由于规定了子数组的长度为k,因此可以通过寻找子数组的最大元素和的方式寻找子数组的最大平均数,元素和最大的子数组对应的平均和也是最大的。
为了找到子数组的最大元素和,需要对数组中的每个长度为k的子数组分别计算元素和。对于长度为n的数组,当k<=n
时,有n - k + 1
个长度为k的子数组。如果直接计算每个子数组的元素和,则时间复杂度过高,无法通过全部测试用例,因此需要使用时间复杂度更低的方法计算每个子数组的元素和。
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int sum = 0;
int n = nums.size();
for (int i = 0; i < k; ++i) {
sum += nums[i];
}
int maxSum = sum;
for (int i = k; i < n; ++i) {
sum = sum - nums[i - k] + nums[i];
maxSum = max(sum, maxSum);
}
return static_cast<double >(maxSum) / k;
}
};
double计算比int要慢,所以中间记录的值要设成int型,最后返回的时候再转换成double