题目:给你一个由 n 个元素组成的整数数组 nums 和一个整数k。
找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于10^-5 的答案都将被视为正确答案。
解题思路:规定了子数组的长度为k,因此可以通过寻找子数组的最大元素和的方式寻找子数组的最大平均数,元素和最大的子数组对应的平均数也是最大的。
为了找到子数组的最大元素和,需要对数组中的每个长度为k的子数组分别计算元素和。对于长度为n 的数组,当 k≤n 时,有 n−k+1 个长度为 k 的子数组。如果直接计算每个子数组的元素和,则时间复杂度过高,无法通过全部测试用例,因此需要使用时间复杂度更低的方法计算每个子数组的元素和。
class Solution{
public double findMaxAverage(int []nums,int k){
int sum=0;
int n=nums.length;
for(int i=0;i<k;i++){
sum +=nums[i];
}
int maxSum=sum;
for(int i=k;i<n;i++){
sum=sum-nums[i-k]+nums[i];
maxSum=Math.max(maxSum,sum);
}
return 1.0*maxSum/k;
}
}