题目描述
给定含有 n
个整数的数组,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
样例
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
注意
- 1 <=
k
<=n
<= 30000。 - 所给数据范围 [-10000,10000]。
算法
(枚举) $O(n)$
- 由于固定了长度,所以直接枚举所有长度为
k
的连续子数组即可。
时间复杂度
- 显然只有 $n - k + 1$ 个连续子数组,所以时间复杂度为 $O(n)$。
C++ 代码
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int n = nums.size(), ans = INT_MIN, tmp = 0;
for (int i = 0; i < n; i++) {
tmp += nums[i];
if (i >= k - 1) {
ans = max(ans, tmp);
tmp -= nums[i - k + 1];
}
}
return 1.0 * ans / k;
}
};