劍指offer Q31 連續子陣列的組大和

2021-09-07 12:32:03 字數 870 閱讀 1237

簡短的分析見:

def findgreatestsumofsubarray(array, index = none):

cursum = 0

maxsum = 0

#return maxsum without the start and end index

if index == none:

for x in array:

cursum = max(cursum, 0)

cursum += x

maxsum = max(maxsum, cursum)

return maxsum

#return maxsum and the start and end index

else:

curs = -1

cure = -1

maxs = -1

maxe = -1

for i in range(len(array)):

if cursum <= 0:

cursum = array[i]

curs = i

cure = i

else:

cursum += array[i]

cure = i

if cursum > maxsum:

maxs = curs

maxe = cure

maxsum = cursum

return maxsum, maxs, maxe

這裡通過index引數過載了兩個版本號,乙個只返回最大子段和,但有的時候我們可能還被要求返回取得最大子段和的起始區間。

上面的**儘管看起來不像動態規劃,可是思想確實是dp的思想。

劍指Offer 程式設計題31(連續子陣列的最大和)

例如輸入的陣列為,和最大的子陣列為 3,10,4,7,2 因此輸出為該子陣列的和18 解法一 舉例分析陣列的規律。我們試著從頭到尾逐個累加示例陣列中的每個數字。初始化和為0。第一步加上第乙個數字1,此時和為1。接下來第二步加上數字 2,和就變成了 1。第三步刷上數字3。我們注意到由於此前累計的和是 ...

劍指offer 31 連續子陣列的最大和

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列,求所有子陣列和的最大值,要求時間複雜度o n 看到這個問題的時候我首先想到是 例項化乙個新陣列,用陣列元素作為下標,元素出現的個數作為陣列值,但是想想又發現不行 因為陣列裡的值不確定,因此例項化陣列的時候陣列大小就不確...

劍指Offer 面試題31 連續子陣列的最大和

連續子陣列的最大和 輸入乙個整形陣列,陣列裡有整數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的 最大值。要求時間複雜度為o n 分析 剛開始令sum 0,f i else if lsum lmaxsum printf lld d d n lmaxsum,ibegindex,...