动态规划
动态规划的特点
- 是求解决策过程最优化的过程。
- 适用于求解将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。
- 各阶段决策依赖于当前面临的状态,又影响以后的发展。
- 当各个阶段决策确定后,就组成一个决策序列。我们可以从决策序列中找到最优解
LeetCode 53
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
length = len(nums)
dp = [0]*length
dp[0] = nums[0]
for i in range(1,length):
if dp[i-1]<=0:
dp[i]=nums[i]
else:
dp[i] = dp[i-1] + nums[i]
return max(dp)
获取在每一个位置上的最佳效果。如果上一效果为增益,则此次累加上一效果。如果上一效果为减益,则此次不累加上衣效果。