python如何求数组连续最大和的示例代码

  

  

一个有n个元素的数组,这n个元素既可以是正数也可以是负数,数组中<代码>连续>   

  
      <李>蛮力法   <李>重复利用已经计算的子数组和李   <李>动态规划李   <李>优化的动态规划李   
  


  

  

找出所有的子数组,然后求出子数组的和,在所有子数组的和中取最大值。

  

代码实现:

  

        # !/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))      

结果:
  

  

 python如何求数组连续最大和的示例代码”> <br/>
  </p>
  <p>算法性能分析:<br/>
  这种方法的时间复杂度为O (n3); </p>
  <p> </p>
  <p>由于总和(i, j)=(i, j - 1) +总和arr [j],在计算总和(i, j)的时候可以使用前面已计算出的金额(i, j - 1)而不需要重新计算,采用这种方法可以省去计算总和(i, j - 1)的时间,从而提高效率。</p>
  <p>代码实现:</p>
  
  <pre类=   # !/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))      

结果:
  

  

 python如何求数组连续最大和的示例代码”> <br/>
  </p>
  <p>算法性能分析:<br/>
  使用了双重循环,时间复杂度为O (n2); </p>
  <p> <br/>
  </p>
  <p>首先可以根据数组最后一个元素arr (n - 1)与最大子数组的关系分为以下三种情况讨论:<br/>
  (包含或不包含,包含的话肯定以最后一个元素结尾,不包含的话,或者最后一个元素单独构成最大子数组,或者转换为求arr[1…2]的最大子数组)<br/>
  (1)最大子数组包含arr (n - 1),即最大子数组以arr (n - 1)结尾;<br/>
  (2)由(n - 1)单独构成最大子数组;<br/>
  (3)最大子数组不包含arr (n - 1),那么求arr [1…n - 1]的最大子数组可以转换为求arr[1…2]的最大子数组。<br/>
  所以有:<br/>
  </p>
  <p> <img src=   # !/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))

python如何求数组连续最大和的示例代码