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

Python遍历列表求指定长度k区间最大和的代码如何优化?

代码优化方案
  • 原代码采用双层循环逐段求和,时间复杂度为O(nk),当列表长度和k都较大时运行效率较低
  • 存在冗余的临时列表temp和重复求和操作,可完全优化去除
最优实现(滑动窗口法)

仅需要计算一次初始窗口和,之后每次减去移出窗口的左端元素、加上新进入窗口的右端元素,无需重复计算整段和,时间复杂度O(n),支持k作为可变参数传入:

def max_k_sum(numb: list[int], k: int) -> int:
    # 边界参数校验
    if k <= 0 or k > len(numb):
        raise ValueError("k的取值范围应为1到列表长度之间的整数")
    # 计算初始第一个窗口的和
    current_sum = sum(numb[:k])
    max_sum = current_sum
    # 窗口向后滑动遍历
    for i in range(k, len(numb)):
        current_sum = current_sum - numb[i - k] + numb[i]
        if current_sum > max_sum:
            max_sum = current_sum
    return max_sum

# 测试验证
numb = [100,33,22,200,333,1000,22]
print(max_k_sum(numb, 2)) # 输出1333
print(max_k_sum(numb, 3)) # 输出1533
极简写法(适合小数据量场景)

如果列表长度较短、追求代码简洁,也可以用生成器表达式实现单行逻辑,可读性高:

max_sum = max(sum(numb[i:i+k]) for i in range(len(numb) - k + 1))

注意:该写法本质还是逐段求和,时间复杂度为O(nk),仅适合短列表场景使用,处理长列表优先选择滑动窗口方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:24:05