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

求长度为k的最大平均子数组:Python代码返回值被向下取整的疑问

解决滑动窗口求最大子数组平均时的取整问题

我需要实现一个函数,找到长度为k的连续子数组的最大平均值并返回。用滑动窗口法写了如下代码:

def findMaxAverage(self, nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: float
    """
    
    curr = 0
    
    # 获取第一个窗口的和
    for i in range(k):
        curr+=nums[i]
    ans = curr
    
    # 滑动窗口寻找最大和
    for i in range(k, len(nums)):
        curr+=nums[i]-nums[i-k]
        ans = max(curr, ans)
    
    # 返回最大和除以k得到最大平均值
    return ans/k

但提交答案时发现,即使使用单除法运算符/,输出仍被向下取整。比如测试用例nums = [1,12,-5,-6,50,3],k = 4,预期结果为12.75,但实际输出为12.00。

问题原因

这是因为代码运行在Python2环境中:Python2里,两个整数使用/运算时会执行地板除法(向下取整),哪怕最终返回值声明为float类型,运算结果已经被截断成整数,再转float就成了12.0。

解决办法

有两种简单的修复方式:

  • 显式将其中一个操作数转为浮点数,确保除法返回浮点结果:
    return float(ans) / k
    
    或者
    return ans / float(k)
    
  • 在代码最顶部导入division模块,强制Python2使用Python3的除法规则(/返回浮点数,//才是地板除法):
    from __future__ import division
    
    def findMaxAverage(self, nums, k):
        # 原有代码不变
    

验证测试用例

修改后,针对测试用例计算:最大子数组和是12 + (-5) + (-6) + 50 = 51,51/4 = 12.75,就能得到正确的浮点结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:15:54