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

寻找和为指定值的子数组:代码仅支持起始位置为1的问题排查

问题修复与解释

你的代码存在几个关键问题,导致无法处理起始位置非第一个元素的情况:

  1. 外层循环范围错误
    原代码外层循环用了range(0,n-1),这会跳过起始索引为n-1(即数组最后一个元素)的情况,导致无法检测到仅包含最后一个元素的子数组。

  2. 不必要的else分支干扰
    内层循环中每次累加后只要不等于s就设置a=[-1],逻辑冗余且容易引发误解。原代码的结构虽能继续后续循环,但可以简化为直接返回结果的逻辑。

  3. 无默认返回值
    如果遍历完所有可能的子数组都没找到符合条件的结果,原函数没有明确返回值,会导致运行时问题。


修复后的代码:

class Solution:
    def subArraySum(self, arr, n, s): 
        # 遍历所有可能的起始索引
        for i in range(n):
            current_sum = 0
            # 从起始索引开始累加,直到找到和为s的子数组
            for j in range(i, n):
                current_sum += arr[j]
                if current_sum == s:
                    # 返回转换为1-based的索引
                    return [i+1, j+1]
        # 所有情况都遍历完仍未找到,返回[-1]
        return [-1]

额外优化提示

如果题目中的数组元素均为正整数,可以在内层循环中加入判断:当current_sum > s时直接跳出内层循环(因为继续累加正整数只会让和更大,不可能等于s),大幅提升算法效率:

class Solution:
    def subArraySum(self, arr, n, s): 
        for i in range(n):
            current_sum = 0
            for j in range(i, n):
                current_sum += arr[j]
                if current_sum == s:
                    return [i+1, j+1]
                elif current_sum > s:
                    break
        return [-1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:33:22