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].
Solution:
This is a sliding window problem.
If we know how to deal with sliding window, this problem is easy to solve.
We keep a window of size k, and move from left to right.
In each move, we remove the leftmost element in this window and add the new element from right.
The time complexity is O(n) and the space complexity is O(1).
Code:
public class Solution { public double findMaxAverage(int[] nums, int k) { double sum = 0; double max = Integer.MIN_VALUE; for (int i = 0; i < k; i++) { sum += nums[i]; } max = Math.max(max, sum / k); for (int i = k; i < nums.length; i++) { sum += nums[i] - nums[i - k]; max = Math.max(max, sum / k); } return max; } }