题目链接
class Solution {
public double findMaxAverage(int[] nums, int k) {
// return findMaxAverage1(nums, k);
return findMaxAverage2(nums, k);
}
// 1.统计和,计算k
public double findMaxAverage1(int[] nums, int k) {
// 1. 先统计前K项的和
int num = 0;
for(int i = 0; i < k; i++) {
num += nums[i];
}
// 2.计划窗口的移动
int n = num;
for(int i = k; i < nums.length; i++) {
n = n - nums[i-k] + nums[i];
// 拿取最大值
num = Math.max(n,num);
}
return 1.0*num / k; // 不乘1.0转化为小数,double类型的话就会有精度不正确的问题
}
// 2.双指针
public double findMaxAverage2(int[] nums, int k) {
// 1. 先统计前K项的和
int len = nums.length;
int num = 0;
for(int i = 0; i < k; i++) {
num += nums[i];
}
int p1 = 0;
int p2 = k;
int max = num;
// 2.计划窗口的移动
while( p2 < len) {
max = max - nums[p1++] + nums[p2++];
num = Math.max(num, max);
}
return 1.0*num / k; // 不乘1.0转化为小数,double类型的话就会有精度不正确的问题
}
}