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

如何用Python解决创建指定长度和目标和的子数组问题

问题分析与解决方案

你的代码和预期输出存在明显矛盾:当前代码是在查找连续的长度为k的子数组,但示例输入对应的预期输出[1,4,5]是数组中不连续的三个元素(和为10)。下面分两种需求场景给出对应解决方案:

场景1:查找连续的长度为k的子数组

你的原代码采用滑动窗口思路,逻辑本身是正确的,但针对给定的示例输入arr = [1,2,3,6,4,9,5]、k=3、target=10,不存在连续的长度为3的子数组和为10,因此原代码运行结果为[]。

如果需求确实是连续子数组,可以优化代码(避免每次重复求和,提升效率):

arr = [1,2,3,6,4,9,5]
k = 3
target = 10
result = []

# 计算初始窗口的和
current_sum = sum(arr[:k])
if current_sum == target:
    result.append(arr[:k].copy())

# 滑动窗口遍历剩余元素
for i in range(k, len(arr)):
    current_sum = current_sum - arr[i - k] + arr[i]
    if current_sum == target:
        result.append(arr[i - k + 1 : i + 1])

print(result)

运行后输出[],符合实际情况。

场景2:查找任意(不连续)长度为k的子序列,元素和为target

如果你的真实需求是找出数组中任意k个不连续元素,使其和等于target,那么需要枚举所有长度为k的元素组合,代码如下:

from itertools import combinations

arr = [1,2,3,6,4,9,5]
k = 3
target = 10
result = []

# 枚举所有长度为k的元素组合
for combo in combinations(arr, k):
    if sum(combo) == target:
        result.append(list(combo))

print(result)

运行这段代码,输出为[[1,4,5]],与你的预期输出一致。

原代码问题说明

原代码的滑动窗口逻辑仅适用于连续子数组的查找,若需求是不连续子序列,该思路完全不适用,需要改用组合枚举的方式实现。

内容的提问来源于stack exchange,提问作者6004 Abdul Rahman Harris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:37:08