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

2021-07-03 04:43:00 字數 958 閱讀 6292

題目:

輸入乙個整形陣列,陣列裡有正數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的最大值,要求時間複雜度為o(n)。例如輸入的陣列為,和最大的子陣列為,因此輸出為和18。

分析:我們試著從頭到尾逐個累加例項陣列中的每乙個數字。初始化和為0,第一步加上數字1,此時和為1,接下來加上數字-2,和就變為-1,第三步加上數字3,得到的和為2,比3本身小。也就是說從第乙個數字開始的子陣列的和會小於從第三個數字開始的子陣列的和。因此,我們從第三個數字開始累加。此時和初始化為3,第四步加上10,和為13,第五步加上-4,和為9.我們發現由於-4乙個負數,累加它之後得到的和會比原來的要小,因此我們必須把之前的和13儲存下來,因為13有可能是最大值。第六步加上數字7,和為16,比之前儲存的13要大,所以用16替換掉13。第七步加上2,和為18,此時更新儲存的和為18。第八步加上-5,和變為13,小於儲存的和18,因此不更新。並且最大的值就是18。

**:bool g_invalidinput = false; 

int findgreatestsumofsubarray(int * pdata,int length)

if(pdata == null || length <= 0)

g_invalidinput  = true;

return 0;

g_invalidinput  = false;

int ncursum = 0;

int ngreatesstsum = 0x80000000;

for(int i=0; iif(ncursum  < 0)

ncursum  = pdata[i];

} else {

ncursum  += pdata[i];

if(ncursum  > ngreatesstsum )

ngreatesstsum = ncursum  ; //儲存最大值

return ngreatesstsum ;

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

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

劍指offer 連續子陣列之和

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

劍指Offer之 連續子陣列的最大和

輸入乙個整數陣列,陣列裡有正數也有負數。求所有子陣列的和的最大值。方法很多,這裡講兩種 1 舉例分析陣列的規律。2 動態規劃。include include using namespace std 功能 連續子陣列的最大和 int findgreatestsumofsubarray vectornu...