原理
例子1
对一个整数数组,例如[-2,1-3,4,-1,2,1,-5,4],求连续子数组中的最大和
"""
动态规划
对一个整数数组,例如[-2,1-3,4,-1,2,1,-5,4],求连续子数组中的最大和
时间复杂度为O(n),即只能遍历一次
分析:
连续子数组长度分别为1,2,3,...n ,列出所有的子数组,分析规则
以一个元素结尾的所有子数组中的最大和依赖于
以前一个元素结尾的所有子数组的最大和presum
若presum>0,presum + cur 即为以当前元素结尾的所有子数组的最大和
若presum<=0, cur 即为以当前元素结尾的所有子数组的最大和
"""
def max_sub_array(alist):
#以数组中每个元素结尾的所有子数组中的最大和
presum = 0
result = 0
for i in range(len(alist)):
if presum > 0:
presum += alist[i]
else:
presum = alist[i]
result = max(presum,result)
return result
if __name__ == "__main__":
alist = eval(input("输入你的数组:").strip())
result = max_sub_array(alist)
print("连续子数组最大和:", result)