寻找和为指定值的子数组:代码仅支持起始位置为1的问题排查
问题修复与解释
你的代码存在几个关键问题,导致无法处理起始位置非第一个元素的情况:
外层循环范围错误
原代码外层循环用了range(0,n-1),这会跳过起始索引为n-1(即数组最后一个元素)的情况,导致无法检测到仅包含最后一个元素的子数组。不必要的
else分支干扰
内层循环中每次累加后只要不等于s就设置a=[-1],逻辑冗余且容易引发误解。原代码的结构虽能继续后续循环,但可以简化为直接返回结果的逻辑。无默认返回值
如果遍历完所有可能的子数组都没找到符合条件的结果,原函数没有明确返回值,会导致运行时问题。
修复后的代码:
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
相关产品推荐
相关产品推荐

