動態規劃由簡及繁(一)

2021-10-09 04:18:38 字數 872 閱讀 3582

輸入乙個整型陣列,陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。

要求時間複雜度為o(n)。

示例1:

輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]

輸出: 6

解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

問題拆解

求連續子陣列的和的最大值。

假設陣列長度為n。

那麼如果知道前n-1子陣列的和的最大值maxn-1,那麼到第n個陣列的最大值就容易求得了。

狀態定義

一維陣列。

設以nums[i]為結尾的最大子陣列和為dp[i]。

其實看到有很多博文總結的說是以這個條件,但是我個人思考了一段時間,不知道為什麼需要這樣。因為一般來說,我們更常見的是用dp

if(nums.length ==1)

int[

] dp =

newint

[nums.length]

; dp[0]

= nums[0]

;for

(int i =

0; i < nums.length; i++

)int max = dp[0]

;for

(int i =

1; i < nums.length; i++)}

return max;

}}考慮優化

不必儲存所有的子陣列的最大和,只把子陣列和的最大值存起來,每次比對當前累加的值和最大值的大小並且更新最大值就可以了。

class

solution

else

}return max;

}}

動態規劃 由簡單到難

爬樓梯問題 每次可以爬1或2個台階 爬到第10層有幾種辦法 climb lambda x climb x 1 climb x 2 if x 2 else x 另一種實現 def climb n temp 1,2 for i in range 3,n 1 temp i 2 sum temp retur...

動態規劃簡介及步驟

一 演算法介紹簡單來說,就是將乙個問題的多階段過程拆分為一系列單階段,逐步遞推,利用各階段間的關係,求出問題的最優解或解法之和。二 演算法思路 1.遞迴到動歸的一般轉化方法 遞迴函式有n個引數,就定義乙個n維的陣列,陣列下標是遞迴函式引數的取值範圍,陣列元素的指就是遞迴函式的返回值,這樣就可以從邊界...

動態規劃 一

在現實生活中,有一類活動的過程,由於它的特殊性,可將過程分程若干個互相聯絡的階段,在它的每一階段都需要作出決策,從而使整個過程達到最好的活動效果。當然,各個階段決策的選取不是任意確定的,它依賴於當前面臨的狀態,又印象以後的發展,當各個階段決策確定後,就組成乙個決策序列,因而也就確定了整個過程的一條活...