【算法】子数组最大平均数 - 滑动窗口

题目

给定一个数组和一个数字 n ,在数组中找到连续的 n 个平均数最大的数字。

原理

先选中开头的 n 个数字,计算出和并记录,然后后移窗口(减去最前面的数再加上后面的一个数),计算出新的和,取最大的和,最后计算平均数并返回。

代码

    public static void main(String[] args) {
        System.out.println(getMaxAvg(new int[]{1, 12, -5, -6, 50, 3}, 4));
    }

    private static double getMaxAvg(int[] arr, int n) {
        int sum = 0;
        for (int i = 0; i < n; i++) {
            sum += arr[i];
        }
        int max = sum;
        for (int i = n; i < arr.length; i++) {
            sum = sum - arr[i - n] + arr[i];
            max = Math.max(sum, max);
        }
        return (double) max / n;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容