最大子陣列和 動態規劃法

2021-08-21 04:08:03 字數 751 閱讀 5600

由於暴力求解的複雜度為o(n**3),確實有點大,那麼不妨採用動態規劃法求解,主要思路也很簡單明瞭,我們假設最大和子陣列由兩部分組成,乙個是前向和sum,另乙個部分就是前向和sum的下乙個元素,如果sum的值小於0就意味著它不可能成為最大子陣列的一部分了,因此必須捨棄之前的sum,重新定義新的sum,這個sum的起始元素就是之前sum和序列的下乙個元素。動態規劃法簡潔明瞭,時間複雜度僅為o(n),減少了求解次數。

arr = [1,-2

,3,4

,-5]def

fun(arr):

sum = arr[0

] max = 0

x = 0

y = 0

for

i in

range(1,

len(arr)):

if sum >= 0

: sum += arr[i]

else

: sum = arr[i]

x = i

if sum > max:

max = sum

y = i

if x>y:

return

arr[0:1]

else

: return

arr[x:y+1

]if

__name__=="__main__"

: print

(fun(arr))

求最大子陣列的和(動態規劃法)

還是動態規劃方法的適應廣些,陣列可以全是負數。前面沒用動態規劃方法如何實現,還需進一步思考,明天繼續。findgreatestsumofsubarray.cpp 定義控制台應用程式的入口點。mishidemudong 2015 5 22 include stdafx.h int max int x,...

動態規劃法求最大子串行和

動態規劃的演算法 maxsubsequencesum3 o n 動態規劃實現,演算法複雜度o n int maxsubsequencesum3 int a,int len 動態規劃部分,捨棄當前和為負的子串行 if cursum 0 return maxsum 記錄下標 include int j ...

動態規劃法求最大子段和問題C

給定由n個整數組成的序列 a1,a2,an 求該序列形如 ai,ai 1,ai 2,ai n 的子段和的最大值,當所有整數均為負整數時,其最大子段和為0。依此定義,所求的最優值為 include include using namespace std int maxsum int a,int b,i...