zoukankan      html  css  js  c++  java
  • Maximum Subarray

    // 求 和最大的连续子序列

    class
    Solution: # @param A, a list of integers # @return an integer def maxSubArray(self, A): dp=[] for i in range(len(A)): if i==0: dp.append(A[i]) else: dp.append(max(A[i],A[i]+dp[i-1])) return max(dp) if __name__=='__main__': s=Solution() A=[-32,-54,-36,62,20,76,-1,-86,-13,38,-58,-77,17,38,-17,43,32,-88] print(s.maxSubArray(A))

     说明:

      给定一个 序列 ,求出 和最大的连续子序列;

      例如,给定序列 [−2,1,−3,4,−1,2,1,−5,4],

      连续 子序列 [4,−1,2,1] 在 所有子序列 中有 最大的和 6.

    如果只是求出最大值而不需要知道是哪个子序列,那么上面的代码就可以了。

    思想:动态规划的思想

      dp[i]保存的是第i个项的最优值(这样描述可能不确切);

    1.   当执行到底A[i]时,就要考虑要不要把A[i]加入到A[i-1]所在的subarray里面去,
    2.   以(加入后这个SubArray的sum)大 还是 (不加入时单独的A[i]值)大 为选择标准。
    3.   若选后者,那么A[i]就作为新的SubArray的第一项。

      递推式是dp[i] = max( A[i] , A[i]+dp[i-1] )

    有人不用dp[]这么一个表,而是用maxSum和localSum来代替记录。

    时间代价是O(n),对效率有要求的情况下,还有一个采用分治的方法,有空补上。

  • 相关阅读:
    设计模式之工厂模式
    在线预览插件pdf.js使用记录
    自学Python:自定义模块导入问题
    MVC流程
    关于django的一些基础知识
    day72 关于rbac组件的小部分面试题
    linux的简单操作和安装
    day71 菜单的排序 点击被选中
    day063 form 和modelform组件
    day051 django第二天 django初识代码
  • 原文地址:https://www.cnblogs.com/iois/p/3941567.html
Copyright © 2011-2022 走看看