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

2021-08-02 02:40:13 字數 676 閱讀 3042

題目:輸入乙個整型陣列,陣列裡有正數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間負責度為o(n)。

看到這個題目,我們首先想到的是求出這個整型陣列所有連續子陣列的和,長度為n的陣列一共有 n(n+2)/2個子陣列,因此要求出這些連續子陣列的和最快也需要o(n^2)的時間複雜度。但是題目要求的o(n)的時間複雜度,因此上述思路不能解決問題。

看到o(n)時間複雜度,我們就應該能夠想到我們只能對整個陣列進行一次掃瞄,在掃瞄過程中求出最大連續子串行和以及子串行的起點和終點位置。假如輸入陣列為,我們嘗試從頭到尾累加其中的正數,初始化和為0,第一步加上1,此時和為1,第二步加上-2,此時和為-1,第三步加上3,此時我們發現-1+3=2,最大和2反而比3乙個單獨的整數小,這是因為3加上了乙個負數,發現這個規律以後我們就重新作出累加條件:如果當前和為負數,那麼就放棄前面的累加和,從陣列中的下乙個數再開始計數。

#include#includeusing namespace std;

//求最大連續子串行和

int findgreatestsumofsubarray(int arry,int len)

return greatestsum;

}

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

題目 輸入乙個整形陣列,陣列裡有正數也有負數,陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為o n 例如,輸入陣列 1,2,3,10,4,7,2,5 和最大的子陣列微3,10,4,7,2,因此輸出該子陣列的和18 思路 1,分析陣列規律 初始化和0,第一哥數字1...

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

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

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

題目 輸入乙個整型陣列,陣列裡有正數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間負責度為o n 看到這個題目,我們首先想到的是求出這個整型陣列所有連續子陣列的和,長度為n的陣列一共有 n n 2 2個子陣列,因此要求出這些連續子陣列的和最快也需要o n 2 ...