求子陣列的最大和

2021-09-06 10:58:56 字數 868 閱讀 8134

分析:輸入乙個整形陣列,陣列裡有正數也有負數,陣列中乙個或連續的多個正數,求所有子陣列的和的最大值。

當我們加上乙個正數時,和會增加;當我們加上乙個負數時,和會減少。如果當前得到的和是個負數,那麼這個和在接下來的累加中應該拋棄並重新清零,不然的話這個負數將會減少接下來的和。

因此需採用dp思想,記錄下當前元素之和(為其最優狀態,既最大),將其與目前所得的最大和比較,若大於則更新,否則繼續。狀態的累加遵循這個過程:如果當前和小於0,則放棄該狀態,將其歸零。

擴充套件:數對之差的最大值。

1

//求子陣列的最大和2//

利用的是dp的思想,依次遍歷陣列中的每個元素,把他們相加,如果加起來小於0,則3//

把當前元素之和清為0,否則則和最大和比較,更新最大和,最後得到必是子陣列的最大和

4 #include5

using

namespace

std;67

int findgreatestsubsum(const

int a,const

intsize)820

21if(maxsum==0

)22 29}

30return

maxsum;31}

3233

int main(void)34

;36int length=sizeof(a)/sizeof(int

);37

38 cout39 system("

pause");

40return0;

41 }

求子陣列最大和

題目 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。因為是o n 的複雜度,...

求子陣列的最大和

題目 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 本題最初為2005年浙江大學計算機系的考研題的最後一道程式設計題,在2006年裡包括google在內的很多知名公司都把本題當作面試題。由於本...

求子陣列的最大和

陣列 一 題目 感謝 提供的題目 求子陣列的最大和 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸...