最大累加陣列問題(最大子序和問題)

2021-10-10 22:25:55 字數 957 閱讀 5216

給定乙個陣列arr,返回子陣列的最大累加和

例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子陣列中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.

[要求]

時間複雜度為o(n)o(n),空間複雜度為o(1)o(1)

[1,

-2,3

,5,-

2,6,

-1]12

3+5+(-

2)+6

=12

這是乙個很有意思的問題,如果我們用暴力法,逐個相加對前乙個和進行比較這是乙個很繁瑣的問題,但是我們可以使用分治法,提高效率,遍歷這個陣列將遍歷得到的元素進行相加,如果這個和大於0繼續相加,如果小於0將sum置為0,繼續相加,直到找到maxsum

class

solution

: def maxsumofsubarray

(self , arr )

:# write code here

iflen

(arr)==0

:return

0 maxsum,nowsum=0,

0for i in arr:

nowsum+

=i if nowsum>maxsum:

maxsum=nowsum

elif nowsum<0:

nowsum=

0return maxsum

c語言實現

最大子序和問題

給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。思路 1 動態規劃首先需要對序列進行遍歷,當前最大子串行的和為sum,最終結果為ans。2 ...

最大子陣列和問題

演算法導論在分治策略一章中提到了最大子陣列和問題,我用c 實現了一下,還是挺簡單的,只不過要return最大子陣列的起始下標 結束下標和最大子陣列和這三個數有點麻煩,如要使用引用的話,因為要遞迴傳值所以不好實現,乙個可行的辦法是使用陣列,將這三個值放在陣列中傳遞。lz這裡並沒有寫這一過程。分治演算法...

最大子陣列問題

顧名思義,最大子陣列問題是求乙個陣列array中 和最大的非空連續子陣列 這樣的連續子陣列我們叫做最大子陣列,它的應用也有 很多,比如說找出時間序列中兩個時間節點使得這兩個時間節點對應的值的落差最大,如下圖 對於這類問題,通過求原始時間序列的一階差分得到序列array,此時求得array的最大子陣列...