連續子陣列的最大和

2021-08-15 06:03:52 字數 922 閱讀 3522

題目:

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:,連續子向量的最大和為8(從第0個開始,到第3個為止)。你會不會被他忽悠住?(子向量的長度至少是1) 要求複雜度為o(n)

解題思路:最直觀的思路是找出陣列的所有子陣列並分別求出它們的和,輸出最大值。長度為n的陣列的子陣列個數為n(n+1)/2,計算出所有子陣列的和,最快也需要o(n*n)時間。考慮另一種思路,第一步,第0個元素加上第1個元素和為3<6,仍然6作為最大和,同理再加上第2個元素和為1<6;第二步,再加上第3個元素時和為8>6,最大和更新為8;第三步,再加上第4個元素和為-7,對於後面元素相加來說前面加個負數肯定不是最大和,因此從第5個元素重新開始相加,此時最大和仍然是8;第四步,很明顯把後面的元素都加上和為5<8,因此最大和為8。

解答:

# -*- coding:utf-8 -*-

class solution:

def findgreatestsumofsubarray(self, array):

# write code here

length = len(array)

tmp_sum = array[0]

max_sum = array[0]

for i in range(1,length):

if tmp_sum < 0:

tmp_sum = array[i]

else:

tmp_sum = tmp_sum + array[i]

if tmp_sum > max_sum:

max_sum = tmp_sum

return max_sum

最大和連續子陣列

問題描述 乙個數值型陣列,其子陣列有多個,求其子陣列中最大的和值。所謂和值,是指數組所有元素相加的和。解法 1 掃瞄法,維護max變數,儲存最大和,其初始值為data 0 假設最大和子陣列的第一位下標為i,i從0到n 1,對於每個i值,從data i 開始,進行累加,每加乙個數,與max變數比較一次...

連續子陣列最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...

連續子陣列最大和

求乙個陣列的連續的子陣列的最大和。例如 連續子向量的最大和為8 從第0個開始,到第3個為止 思路 對於每個元素,有兩種可能,一是加入到原來的子陣列成為新的一員 二是自己成為新子陣列的開頭,這兩種情況應該怎樣判斷呢 如果當前元素加入到子串行中,求和的結果比自己的值還小,那麼就自己成為新子串行的開頭 即...