You are given an integer array nums consisting of n elements, and an integer k.
Find a contiguous subarray whose length is equal tok that has the maximum average value and return this value. Any answer with a calculation error less than 10-5 will be accepted.
Example 1:
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
Example 2:
Input: nums = [5], k = 1
Output: 5.00000
Constraints:
n == nums.length
1 <= k <= n <= 105
-104 <= nums[i] <= 104
Solutions
Solution 1: Sliding Window
Thinking
The maximum average of a window of length \(k\) is the maximum sum. Recomputing each window is \(O(nk)\) for \(n\le 10^5\).
Slide a length-\(k\) sum: add the entering value, drop the leaving one, and divide the best sum by \(k\).
We maintain a sliding window of length \(k\), and for each window, we calculate the sum \(s\) of the numbers within the window. We take the maximum sum \(s\) as the answer.
The time complexity is \(O(n)\), where \(n\) is the length of the array \(nums\). The space complexity is \(O(1)\).