leetcode-643. 子数组最大平均数 I

239 阅读1分钟
/**
 * ref:https://leetcode-cn.com/problems/maximum-average-subarray-i/
 * 给你一个由n个元素组成的整数数组nums和一个整数k。
 * 请你找出平均数最大且长度为k的连续子数组,并输出该最大平均数。
 * 示例 1:
 * 输入:nums = [1,12,-5,-6,50,3], k = 4
 * 输出:12.75
 * 解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
 */
public class MaximumAverage {

    public static void main(String[] args){
        int[] nums = new int[]{1,12,-5,-6,50,3};
        System.out.println(findMaxAverage(nums,4));
    }

    /**
     * 解题思路:
     * 首先迭代i=0~k间的元素进行累计,计算出首个k个元素的和sum。
     * 然后从j=k~nums.length之间,每次迭代一个元素,使用sum-nums[j-k]+nums[j]
     * 计算每次迭代的和,然后比较出最大的和,之后计算平均值即可。
     * @param nums
     * @param k
     * @return
     */
    public static double findMaxAverage(int[] nums,int k){
        // 计算第一个k个元素之和
        int sum = 0;
        for (int i = 0; i < k; i++) {
            sum += nums[i];
        }
        // 迭代计算之后出现的k个元素之和,并取出最大的
        int max = sum;
        for (int j = k; j < nums.length; j++) {
            sum = sum - nums[j-k] + nums [j];
            max = Math.max(sum,max);
        }
        return (double) max/k;
    }

}