Python暴力法求解连续子数组最大和代码错误排查
错误原因
- 核心问题是
max_sum初始值设置错误:你当前把初始值设为0,而你提供的测试数组所有元素均为负数,所有连续子数组的和都是负数,没有任何一个能大于0,所以代码最终会错误返回0。而常规的连续子数组最大和问题要求子数组至少包含1个元素,这种全负数组的正确结果应该是数组中最大的单个元素,也就是-3。 - 额外优化点:可以补充空数组的边界判断,避免输入为空时报错。
修正后代码
a = [-13, -3, -25, -20, -3, -16, -23, -12, -5, -22, -15, -4, -7] def max_Summ(a): # 空数组特殊处理 if not a: return 0 # 初始值改为数组第一个元素,适配全负场景 max_sum = a[0] k = 0 for i in a: temp_sum = 0 for j in a[k::]: temp_sum += j if temp_sum > max_sum: max_sum = temp_sum k += 1 return max_sum print(max_Summ(a))
运行修正后的代码会输出-3,符合预期。
注:如果业务场景允许选取空数组作为子数组,此时空数组和为
0是正确结果,无需修改初始值。
内容的提问来源于stack exchange,提问作者Lego Games
相关产品推荐
相关产品推荐

