def max_sum_subarray(arr):
cur_max_sum = global_max_sum = arr[0]
start = end = 0
sz = len(arr)
for i in range(1, sz):
cur_max_sum = max(arr[i], cur_max_sum+arr[i])
global_max_sum = max(global_max_sum, cur_max_sum)
if cur_max_sum > global_max_sum:
global_max_sum = cur_max_sum
end = i
g = global_max_sum
for i in range(end, -1, -1):
g -= arr[i]
if not g:
start = i
break
ans = {
'global_max_sum': global_max_sum,
'start': start+1,
'end': end+1
}
return ans
这里,start
和end
在if
下的for循环内没有得到更新,尽管条件满足。
如果从start
中使用end
或if
,则没有问题。是否有任何范围界定问题或其他问题?请详细解释我。
谢谢。
答案 0 :(得分:3)
这是一个逻辑错误:
global_max_sum = max(global_max_sum, cur_max_sum)
if cur_max_sum > global_max_sum:
实际上,cur_max_sum
不能大于global_max_sum
。