劍指offer動態規劃演算法題詳解

2021-10-08 02:43:42 字數 820 閱讀 9010

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。

求所有子陣列的和的最大值。

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

這是一道很簡單的動態規劃演算法題,但是重在思路,想的過程。

我們首先分析題目,求的是子陣列的和,那麼其實這個更簡單了。

一維陣列填表,我們用陣列nums = [-2,1,-3,4,-1,2,1,-5,4]舉例:

接下來我們解釋為什麼這麼去填表:如同揹包問題一樣,這個題的題解也是要依賴於前面問題的解的

將第乙個值填入,因為沒有比較所以直接填入,

第二個值填入,與前面子問題的解相加,發現成了-1還不如就填我這個值來的大,因此這裡填1

第三個值填入,與前面子問題解相加,得-2雖然這步造成了負優化,但是,比我本值還大,因此我們可以保留,這裡填-2;

第四步,與前面子問題解相加,得-2,比本值還小了,直接中斷連續陣列,填入本值。

第五步,…,得3,雖然負優化一波不過比此處陣列值大,保留,

以此類推,我們就可以得到它的最高值令應該是,sum=max(sum+num[i],num[i]);res=max(sum,res) ,sum為當前構成的連續陣列的和,res為我們求的最大值。

接下來附上**

public

intmaxarray

(int

nums)

return res;

}

演算法 動態規劃 演算法題

dp 動態規劃,dynamic programming 將乙個問題拆成幾個子問題,分別求解這些子問題,即可推斷出大問題的解。概念 無後效性。嚴格定義 如果給定某一階段的狀態,則在這一階段以後過程的發展不受這階段以前各段狀態的影響。最優子結構。大問題的最優解可以由小問題的最優解推出,這個性質叫做 最優...

動態規劃演算法最大欄位和摘要 動態規劃演算法詳解

動態規劃 dynamic programming 是一種在數學 電腦科學和經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規劃背後的基本思想非常簡單。大致上,若要解乙個給定問...

動態規劃演算法

一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...