Maintain a fixed-size sliding-window sum, updating it by adding the entering value and subtracting the leaving value.
Complexity
O(n) time and O(1) extra space.
Find the contiguous subarray of fixed length with the greatest average.
Maintain a fixed-size sliding-window sum, updating it by adding the entering value and subtracting the leaving value.
O(n) time and O(1) extra space.
package main
func findMaxAverage(nums []int, k int) float64 {
windowSum := 0
for index := 0; index < k; index++ {
windowSum += nums[index]
}
best := windowSum
for index := k; index < len(nums); index++ {
windowSum += nums[index] - nums[index-k]
if windowSum > best {
best = windowSum
}
}
return float64(best) / float64(k)
}
class Solution:
def findMaxAverage(self, nums: list[int], k: int) -> float:
window_sum = sum(nums[:k])
best = window_sum
for index in range(k, len(nums)):
window_sum += nums[index] - nums[index - k]
best = max(best, window_sum)
return best / k
function findMaxAverage(nums: number[], k: number): number {
let windowSum = 0;
for (let index = 0; index < k; index += 1) windowSum += nums[index];
let best = windowSum;
for (let index = k; index < nums.length; index += 1) {
windowSum += nums[index] - nums[index - k];
best = Math.max(best, windowSum);
}
return best / k;
}