/**
* 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
sum += nums[i]
}
// 迭代计算之后出现的k个元素之和,并取出最大的
int max = sum
for (int j = k
sum = sum - nums[j-k] + nums [j]
max = Math.max(sum,max)
}
return (double) max/k
}
}