JIAKAOBO

LeetCode

venmo
wechat

感谢赞助!

  • ㊗️
  • 大家
  • offer
  • 多多!

Problem

You are given an integer array nums consisting of n elements, and an integer k.

Find a contiguous subarray whose length is equal to k 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 <= 10^5$
  • $-10^4 <= nums[i] <= 10^4$

Code

class Solution {
    public double findMaxAverage(int[] nums, int k) {
        int currSum = 0;
        double maxSum = -Double.MAX_VALUE;

        for(int i = 0; i < nums.length; i++) {
            int num = nums[i];
            currSum += num;

            if(i > k - 1) {
                currSum -= nums[i - k];
            }

            if(i >= k - 1) {
                maxSum = Math.max(maxSum, currSum);
            }
        }

        return maxSum / k;
    }
}