LeetCode643. 子数组最大平均数I

发布时间 2023-12-04 14:50:44作者: Ac_c0mpany丶

题目描述

思路:滑动窗口模板

  • 定义需要维护的变量
// 1. 定义需要维护的变量
double sum = 0;
double max_avg = Integer.MIN_VALUE;
  • 窗口固定大小为k,所以用if
if (end - start + 1 == k) {
	sum -= nums[start];
	start += 1;
}

方法一:

class Solution {
    public double findMaxAverage(int[] nums, int k) {
        // 1. 定义需要维护的变量
        double sum = 0;
        double max_avg = Integer.MIN_VALUE;

        // 2. 定义窗口边界
        int start = 0;
        for (int end = 0; end < nums.length; end ++ ) {
            // 3. 更新需要维护的变量
            sum += nums[end];
            if (end - start + 1 == k) {
                max_avg = Math.max(max_avg, sum / k);
            }
            // 4. 根据题意可知,窗口长度固定为k,所以用if
            // 收缩窗口 其实可以和上面代码合并一起,在这里主要是为了体现框架
            if (end - start + 1 == k) {
                sum -= nums[start];
                start += 1;
            }
        }
        // 5. 返回结果
        return max_avg;
    }
}

在Java中,Double.MIN_VALUE代表正的最小值,而不是负值。具体来说,Double.MIN_VALUE是一个正数,它是最接近正零的 double 类型数值。它并不表示最小的负数值。
避坑:double max_avg = Double.MIN_VALUE;