You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode第643题代码返回12而非12.75,求原因(最大子数组平均数)

LeetCode 643题「最大子数组平均数」代码错误分析与修正

你的代码存在三个核心问题,导致计算结果错误:

  • 子数组元素个数计算错误:内层循环条件j < i+k-1只累加了k-1个元素,而非题目要求的k个。比如测试用例中k=4时,实际只计算了每个子数组的前3个元素,漏掉了第4个,直接导致和的计算偏小。
  • 累加和未重置:变量s在每次外层循环(切换子数组起始位置)时没有重置为0,后续子数组的和是在前一个子数组和的基础上继续累加,完全偏离了正确的子数组和计算逻辑。
  • max更新时机错误:每次累加单个元素后就更新max,此时s还不是完整的长度为k的子数组和,导致max记录的是部分元素的和,而非目标子数组的和。

修正后的代码(滑动窗口优化版)

class Solution {
    public double findMaxAverage(int[] nums, int k) {
        int n = nums.length;
        long sum = 0; // 用long避免整数溢出
        // 计算第一个窗口的和
        for (int i = 0; i < k; i++) {
            sum += nums[i];
        }
        long maxSum = sum;
        // 滑动窗口计算后续窗口的和
        for (int i = k; i < n; i++) {
            sum = sum - nums[i - k] + nums[i];
            maxSum = Math.max(maxSum, sum);
        }
        return (double) maxSum / k;
    }
}

修正说明

  1. 先计算第一个长度为k的子数组和,用long类型避免数组元素和过大时的整数溢出问题;
  2. 滑动窗口优化:每次移动窗口时,减去离开窗口的元素,加上进入窗口的元素,以O(n)时间复杂度高效计算每个窗口的和;
  3. 只记录完整k元素子数组的最大和,最后除以k得到正确的最大平均值。

内容的提问来源于stack exchange,提问作者Gargi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:15:07