def main(temp_list):
# 计算列表的长度,因为要逐个遍历列表中的元素
n = len( temp_list )
if n <= 1:
print(temp_list,'该数组为空/或只有一个元素')
# 先初始化一个最大值 max_value
# 如果在执行的过程中,有比max_value大的值,则替换
# 这就是动态规划
max_value = -1000000000000
# 初始化一个中间结果
temp_value = 0
# 连续子列表的开始index 和 结束index
start_index = 0
end_index = 0
index_list = []
for i in range(n):
# 如果当前的temp_value+temp_list[i]这个元素,比temp_list[i]还小
# 说明temp_value不是最大的值,temp_list[i]是更大的值,
# 就可以把之前的temp_value舍弃掉,从temp_list[i]重新找,所以start_index设置为i
# end_index,只所以设置为1,是因为后期end_index会自动+1
# 然后最后的end_index = start_index + end_index
if temp_value + temp_list[i] < temp_list[i]:
start_index = i
end_index = 1
else:
end_index += 1
# 2者中去最大的
temp_value = max ( temp_value + temp_list[i], temp_list[i] )
# 2者中取最大的
max_value = max( max_value, temp_value )
if temp_value == max_value:
index_list.append( [start_index, start_index+end_index] )
# 最后打印最大的和max_value,以及开始和结束的位置
print( max_value, index_list[-1] )
if __name__ == '__main__':
a = [5,-7,3,5,-2,4,-1]
main(a)