Maximum Average Subarray
643.Maximum Average Subarray I
Array
Sliding Window
Problem Statement:
Find a contiguous subarray of length k within the array nums that has the maximum average value. Return the maximum average value.
Example:
Input:
nums = [1,12,-5,-6,50,3] k = 4→
Output:
12.75Maximum average is (12 - 5 - 6 + 50) / 4 = 51 / 4 = 12.75
Algorithm:
- Use sliding window technique to track sum of k elements
- Add incoming element to sum
- Subtract outgoing element (i-k) when window exceeds k size
- Update maximum sum when window size is k
- Return maximum sum divided by k
Complexity:
Time: O(n) | Space: O(1)
Java Solution:
public double findMaxAverage(int[] nums, int k) {
int sum = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
sum += nums[i]; // Add current element
if (i - k >= 0) // Remove element outside window
sum -= nums[i - k];
if (i - k >= -1) // Update max when window size is k
max = Math.max(sum, max);
}
return (double) max/k;
}
Python Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
curr_sum = 0
max_sum = float('-inf')
for i in range(len(nums)):
curr_sum += nums[i] # Add current element
if i >= k: # Remove element outside window
curr_sum -= nums[i - k]
if i >= k - 1: # Update max when window size is k
max_sum = max(max_sum, curr_sum)
return max_sum / k
C++ Solution:
double findMaxAverage(vector<int>& nums, int k) {
int sum = 0;
int max_sum = INT_MIN;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i]; // Add current element
if (i >= k) // Remove element outside window
sum -= nums[i - k];
if (i >= k - 1) // Update max when window size is k
max_sum = max(max_sum, sum);
}
return (double)max_sum / k;
}