Given an array consisting of n integers, find the contiguous subarray of given length k that has the maximum average value. And you need to output the maximum average value.
Example 1:
Input: [1,12,-5,-6,50,3], k = 4
Output: 12.75
Explanation: Maximum average is (12-5-6+50)/4 = 51/4 = 12.75
Note:
1 <= k <= n <= 30,000.
Elements of the given array will be in the range [-10,000, 10,000].
#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int size=nums.size();
assert(size>0 && k>0 && k<=size);
double res;
double sum=0;
//init res
for(int i=0;i<k;i++){
sum+=nums[i];
res=sum;
}
//slide window maintain k elements,
//when add nums[i],delete nums[i-k]
for(int i=k;i<size;i++){
sum=sum+nums[i]-nums[i-k];
res=max(res,sum);
}
return res/k;
}
};
int main(){
int arr[]={1,12,-5,-6,50,3};
vector<int> vec(arr,arr+sizeof(arr)/sizeof(int));
int k=4;
cout<<Solution().findMaxAverage(vec,4)<<endl;
return 0;
}