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循环中更新,尽管条件满足。如果在if之外使用start或end,则没有任何问题。是否有任何作用域问题或其他问题?请给我详细解释一下。
提前谢谢。
发布于 2018-07-23 04:04:11
这是一个逻辑错误:
global_max_sum = max(global_max_sum, cur_max_sum)
if cur_max_sum > global_max_sum:从字面上看,cur_max_sum不可能比global_max_sum更强大。
https://stackoverflow.com/questions/51468808
复制相似问题