示例 1:
输入: [1,12,-5,-6,50,3], k = 4 输出: 12.75 解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
注意:
1 <= k <= n <= 30,000。 所给数据范围 [-10,000,10,000]。
思路:首先找到第一个k长度的连续子数组的值,然后用此值与其它k长度的连续子数组进行比较;采用滑块式的方法得到下一个k长度的连续子数组。因为是连续的,所以减去最开始那个,加上k长度后的那个值就是新的k长度连续子数组。
class Solution {
public double findMaxAverage(int[] nums, int k) {
int max=0;
for(int i=0 ; i<k; i++){ //找到第一个k位的值
max+=nums[i];
}
int tmp=max;
for(int j=k ; j<nums.length ; j++){ //与max进行比较
tmp-=nums[j-k];
tmp+=nums[j];
if(tmp>max){
max=tmp;
}
}
return max/(double)k;
}
}