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

最多含K个元素的子数组最大和求解:问题排查与优化方案

最多含K个元素的子数组最大和

给定整数数组与正整数k,找出长度≤k的子数组的最大和(子数组为数组的连续部分)。例如数组[5, -3, 5, 5, -3, 5]、k=3时,最大和为10,对应子数组[5, 5]。

我最初尝试结合Kadane算法与大小为K的滑动窗口实现,代码如下:

maxi = nums[0]
max_so_far = 0
prev = 0
for i in range(len(nums)):
    max_so_far += nums[i]
    if (i - prev) >= k:
        max_so_far -= nums[prev]
        prev += 1
    maxi = max(maxi, max_so_far)
    if max_so_far < 0:
        max_so_far = 0
        prev = i + 1
return maxi

但该方案无法通过以下测试用例:

nums = [5, -3, 5, 5, -3, 5]
k = 3

正确解法:前缀和 + 单调队列(时间复杂度O(n))

def maxSubarraySum(self, nums, k) -> int:
    prefix_sum = [0] * len(nums)
    prefix_sum[0] = nums[0]
    for i in range(1, len(nums)):
        prefix_sum[i] = prefix_sum[i-1] + nums[i]
    q = deque()
    for i in range(k):
        while len(q) > 0 and prefix_sum[i] >= prefix_sum[q[-1]]:
            q.pop()
        q.append(i)
    maxi = max(prefix_sum[:k])
    for i in range(1, len(nums)):
        if q[0] < i:
            q.popleft()
        if i + k - 1 < len(nums):
            while len(q) > 0 and prefix_sum[i + k - 1] >= prefix_sum[q[-1]]:
                q.pop()
            q.append(i + k - 1)
        maxi = max(maxi, prefix_sum[q[0]] - prefix_sum[i-1])
    return maxi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:28:13