力扣连接:https://leetcode-cn.com/probl...
解题思路:
- 看到题的第一眼,只要状态是需要动态决定的,那么大概率就是DP动态规划了
- 动态规划基本上是需要三架马车或者三板斧来决定的
(1)确定数组元素的意义:即dp[]数组是什么含义
(2)定义数组元素间的关系式,即状态转移方程:即 dp[n] = dp[n-1] + x
(3)确定初始值:学过数学归纳法的都知道,虽然我们知道了数组元素之间的关系式,如dp[n] = dp[n-1] + dp[n-2],但是我们需要知道最开始的值,dp[1]和dp[2]的值,这就是所谓的初始值
3.回到这道题本身:(1)动态数组元素的意义:dp[i](0 <= i <= n)表示在下标为i的时候,0~i之间数组元素和的最大值 (2)状态转移方程:dp[i] = dp[i - 1] + nums[i],考虑到数组中会有负数,那么方程进一步为:dp[i] = max(dp[i - 1] + nums[i], nums[i]) (3)初始值:由于初始值肯定是从数组第一个元素开始,所以初始值应该为数组第一个元素的值,那么求和就从第二个下标开始遍历
func maxSubArray(nums []int) int {
max := nums[0] // 初始值
for i := 1; i < len(nums); i ++ {
if nums[i] + nums[i -1] > nums[i] { // 状态转移方程
nums[i] += nums[i-1]
}
if nums[i] > max {
max = nums[i]
}
}
return max
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。