You are given an integer array nums consisting of n elements, and an integer k.
Find a contiguous subarray whose length is equal to k that has the maximum average value and return this value. Any answer with a calculation error less than
1
0
?
5
10^{-5}
10?5 will be accepted.
?
Input: nums = [1,12,-5,-6,50,3], k = 4
Output: 12.75000
Explanation: Maximum average is (12 - 5 - 6 + 50) / 4 = 51 / 4 = 12.75
Input: nums = [5], k = 1
Output: 5.00000
From: LeetCode
Link: 643. Maximum Average Subarray I
The function starts by calculating the sum of the first k elements. Then, it slides the window across the array, updating the sum for each new window by subtracting the element that is left behind and adding the new element. It keeps track of the maximum sum encountered. Finally, it returns the maximum average by dividing the maximum sum by k.
double findMaxAverage(int* nums, int numsSize, int k) {
// Initial calculation for the first window
double sum = 0;
for (int i = 0; i < k; i++) {
sum += nums[i];
}
double maxSum = sum;
// Slide the window, update the sum and maxSum
for (int i = k; i < numsSize; i++) {
sum = sum - nums[i - k] + nums[i];
if (sum > maxSum) {
maxSum = sum;
}
}
// Return the maximum average
return maxSum / k;
}