LeetCode题目,剑指 Offer 42. 连续子数组的最大和
先看题目描述
算法和思路
动态规划
这题我们可以使用动态规划解决
- 定义状态方程 dp[i] 表示以 nums[i] 结尾的子数组的最大值
- 状态转移方程为:dp[i] = nums[i] + max{0,dp[i - 1]};因为若 dp[i - 1] < 0,说明其对 dp[i] 有负贡献,不如舍去
- 初始状态为 dp[0] = nums[0]
- 最后返回 dp 列表中的最大值即可
算法源码
动态规划
1 | class Solution { |
由于状态转移方程中 dp[i] 只与 dp[i - 1] 有关,因此可以使用滚动数组的思路优化空间复杂度
1 | class Solution { |