Python 3:变量作用域

时间:2018-07-22 20:00:57

标签: python python-3.x variables scoping

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

这里,startendif下的for循环内没有得到更新,尽管条件满足。 如果从start中使用endif,则没有问题。是否有任何范围界定问题或其他问题?请详细解释我。

谢谢。

1 个答案:

答案 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