一个有n个元素的数组,这n个元素既可以是正数也可以是负数,数组中<代码>连续> 代码的一个或多个元素可以组成一个连续的子数组,一个数组可能有多个这种连续的子数组,求子数组的最大值,例如,对于数组(1、2、4、8、4、7、1、5]而言,其最大和的子数组为(4、8、4、7)最大值为15。
-
<李>蛮力法李>
<李>重复利用已经计算的子数组和李>
<李>动态规划李>
<李>优化的动态规划李>
找出所有的子数组,然后求出子数组的和,在所有子数组的和中取最大值。
代码实现:
# !/usr/bin/env python3 # - * -编码:utf - 8 - * # @Time: 2020/1/29 21:59 # @Author:我校 # @Software: PyCharm # @Blog: https://blog.csdn.net/weixin_44321080 def maxSubArrSum (arr): 如果arr==没有或len (arr) & lt;=0: 打印(“参数不合理!”) 返回 thisSum=0 maxSum=0 我=0 虽然我& lt;len (arr): j=我 虽然j & lt;len (arr): # j控制连续子数组包含的元素个数 thisSum=0 k=我# k表示连续子数组开始的下标 而k & lt;珍: thisSum arr +=[k] k +=1 如果thisSum比;maxSum: maxSum=thisSum j +=1 我+=1 返回maxSum if __name__==癬_main__”: arr=[1、2、4、8、4、7、1、5] 打印(1最大子数组求和:,maxSubArrSum (arr))
结果:
# !/usr/bin/env python3 # - * -编码:utf - 8 - * # @Time: 2020/1/30 10:53 # @Author:我校 # @Software: PyCharm # @Blog: https://blog.csdn.net/weixin_44321080 def maxSubArrSum (arr): 如果arr==没有或len (arr) & lt;=0: 打印(“参数不合理!”) 返回 maxSum=2 * * 31 我=0 虽然我& lt;len (arr): #我:0 ~ 7 金额=0 j=我 虽然j & lt;len (arr): # j: 0 ~ 7 总结+=arr [j] #总结重复利用 如果金额比;maxSum: #每加一次就判断一次 maxSum=钱 j +=1 我+=1 返回maxSum if __name__==癬_main__”: arr=[1、2、4、8、4、7、1、5] print(2马克斯子数组求和:,maxSubArrSum (arr))
结果:
# !/usr/bin/env python3 # - * -编码:utf - 8 - * # @Time: 2020/1/30 11:19 # @Author:我校 # @Software: PyCharm # @Blog: https://blog.csdn.net/weixin_44321080 def maxSubArrSum (arr): 如果arr==没有或len (arr) & lt;=0: 打印(“参数不合理!”) 返回 n=len (arr) 结束=[所有]* n #结束(我)表示包含arr[我]的最大子数组和 所有n=[所有]* #(我)表示最大子数组和 结束(n - 1)=arr (n - 1) 所有(n - 1)=arr (n - 1) 结束[0]=[0]=arr [0] i=1 虽然我& lt;护士: 结束[我]=max (arr结束[i - 1] +[我],[我])的arr # i=1时若arr [0] & lt; 0,则从arr[1]重新开始 [我]=max(结束[我],[i - 1]) 我+=1 返回所有(n - 1) if __name__==癬_main__”: arr=[1、2、4、8、4、7、1、5] print(3马克斯子数组求和:,maxSubArrSum (arr))