题目
滑动窗口
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Main main = new Main();
int [] nums = new int[]{-1};
main.findMaxAverage(nums, 1);
}
public double findMaxAverage(int[] nums, int k) {
// 滑动窗口, 每次滑动根据移除和添加的元素 重新计算窗口平均值
int left = 0;
int right = left + k;
double max = -Double.MAX_VALUE;
double preAvg = 0;
while (right <= nums.length) {
if (left == 0) {
preAvg = Arrays.stream(Arrays.copyOfRange(nums, left, right)).average().orElse(Double.NaN);
} else {
preAvg = preAvg + (((double) nums[right - 1] - (double) nums[left - 1]) / k);
}
max = Math.max(preAvg, max);
left ++;
right ++;
}
return max;
}
}
基本思路
-
注意在计算java除法的时候, 一定要将每个数都转成double计算
-
注意Double.MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324 是一个非负数值, 而不是想象当中的double的最小值-2^63次
如果想表示负数的最小值应该用-Double.MAX_VALUE.
注意Integer.MIN_VALUE就是负数-2147483648 关于Java double取值范围及Double的MAX_VALUE和MIN_VALUE的总结