最大子数组和
https://leetcode-cn.com/problems/maximum-subarray/
动态规划
构建 DP 数组:dp[i] 存储以 nums[i] 为结尾的最大子数组和,不用关心这个数组是从哪里开始的。如果 nums[i-1] 已被计算出,则对于 nums[i] 只有 2 种情况:要么连接上前面的子数组,要么自己成为一个子数组。取最大的即可。最后遍历 DP 数组,得到最大子序列长。
base case: 第一个元素前面没数组了,以它结尾的最大和就是它自己。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | func maxSubArray(nums []int) int {     dp := make([]int, len(nums))
           dp[0] = nums[0]
           for i := 1; i < len(nums); i++ {         dp[i] = max(dp[i-1] + nums[i], nums[i])     }
      res := math.MinInt16     for _, v := range dp {         res = max(res, v)     }     return res }
  func max(a int, b int) int {     if a > b {         return a     }     return b }
 
  |