動態規劃 求最大子序和 動態規劃題目總結

2021-10-05 10:35:14 字數 1197 閱讀 8439

給定乙個整數陣列 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...