给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。
示例 1:
输入:nums = [1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
示例 2:
输入:nums = [5], k = 1
输出:5.00000
提示:
n == nums.length
1 <= k <= n <= 105
-104 <= nums[i] <= 104
前缀和
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int s[100010] = {0};
int n = nums.size();
for(int i = 0; i < n; i ++ ) s[i + 1] = s[i] + nums[i];
int res = INT_MIN;
for(int i = k; i < n + 1; i ++ )
res = max(res, s[i] - s[i - k]);
return (double)res / k;
}
};
双指针
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int res = INT_MIN;
for(int i = 0, j = 0, sum = 0; i < nums.size(); i ++ ) {
sum += nums[i];
if(i - j == k) sum -= nums[j ++ ];
if(i >= k - 1) res = max(res, sum);
}
return (double) res / k;
}
};