Maximum Average Subarray I

Problem

Given an array and an integer k, find the maximum average value of any contiguous subarray of length k.

Input:  nums = [1,12,-5,-6,50,3], k = 4
Output: 12.75

Python Solution

def find_max_average(nums, k):
    window_sum = sum(nums[:k])
    best = window_sum
    for i in range(k, len(nums)):
        window_sum += nums[i] - nums[i - k]
        best = max(best, window_sum)
    return best / k

C++ Solution

double findMaxAverage(vector<int>& nums, int k) {
    long windowSum = 0;
    for (int i = 0; i < k; i++) windowSum += nums[i];
    long best = windowSum;
    for (int i = k; i < nums.size(); i++) {
        windowSum += nums[i] - nums[i - k];
        best = max(best, windowSum);
    }
    return (double) best / k;
}

Java Solution

class Solution {
    public double findMaxAverage(int[] nums, int k) {
        long windowSum = 0;
        for (int i = 0; i < k; i++) windowSum += nums[i];
        long best = windowSum;
        for (int i = k; i < nums.length; i++) {
            windowSum += nums[i] - nums[i - k];
            best = Math.max(best, windowSum);
        }
        return (double) best / k;
    }
}

Complexity

Time: O(n) — a single sliding pass over the array. Space: O(1) — the running sum is tracked with one variable.

Written by Lorens Mishra

Software Engineer Notes Management System Administrator

Discussion

0 comments
Sign in to join the discussion.

No comments yet. Be the first to say something.