image.png

    1. public class AvgArray {
    2. public static void main(String[] args) {
    3. System.out.println(findMaxAverage(new int[]{1,2,3,-4,24,9,15}, 2));
    4. }
    5. /**
    6. * 使用滑动窗口,求出数组nums中,长度为k的子数组的最大平均值
    7. * @param nums
    8. * @param k
    9. * @return
    10. */
    11. private static double findMaxAverage(int[] nums, int k) {
    12. // 数组的长度
    13. int n = nums.length;
    14. if (k == 0 || k > n) {
    15. return -1d;
    16. }
    17. // 定义数组中的和
    18. int sum = 0;
    19. // 求出第一个窗口中元素的和
    20. for (int i = 0; i < k; i++) {
    21. sum += nums[i];
    22. }
    23. int max = sum;
    24. // 移动窗口
    25. for (int i = k; i < n; i++) {
    26. // 窗口移动一位,添加一位数据,减去一位数据
    27. sum = sum + nums[i] - nums[i - k];
    28. max = Math.max(sum, max);
    29. }
    30. return 1.0 * max/k;
    31. }
    32. }