給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。解決動態規劃問題 主要分為以下三步:示例:輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
目標(objection)
定義狀態(define status)
轉化方程(transform equation)
下面和大俠一起分析下這個問題吧!
目標 :最大子串行和
定義狀態:m(j)表示到j位置之前的最大子串行和
轉化方程:
m [j
+1]=
m[j]+nums[j] & m[j]+nums[j]< nums[j] \\ nums[j] & else \end
m[j+1]
={m[
j]+n
ums[
j]nu
ms[j
]m[
j]+n
ums[
j]ms[j
]els
e在初始位置:當前值和最大值都是 nums[0]
向下迴圈:如果當前子序和+nums[j]的值大於nums[j] ,說明nums[j]的加入,讓整個序列和增加了。反之加入後,如果值小於nums[j] ,還不如直接讓nums[j]作為新序列的開始。
下面是python 的**實現:
def
solution
(nums):if
len(nums)==1
:return nums[0]
iflen
(nums)==0
:return-1
max_=current=nums[0]
for x in
range(1
,len
(nums)):
current=current+nums[x]
if current>
0else nums[x]
max_=current if current>max_ else max_
return max_
print
(solution([4
,-1,
2,5]
))
最大子序和 動態規劃
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。def maxsubarray nums length len nums for i in ...
動態規劃 最大子序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 1 輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6 示例 2 輸入 nums 1 輸出 1 示例 3 輸入 nums 0 輸出 0...
動態規劃 最大子序和
今天總結一下有關動態規劃問題中最大子序和的問題。53.最大子陣列和 題目要求給定乙個陣列,讓我們求出最大連續子陣列的和。我們使用動態規劃來解決此類問題。dp i 表示以nums i 結尾的連續子串行的和的最大值。那麼我們要求的答案就是max.其狀態轉移方程很容易就看出為dp i max dp i d...