面試題 求連續子陣列的最大和(三種解法)

2021-09-24 05:20:40 字數 1265 閱讀 2008

**

1、可以將給定陣列的的所有子陣列列出來,然後找到子陣列和做大的情況,具體來說就是: 對陣列內每乙個數a[i]進行遍歷,然後遍歷以它們為起點的子陣列,比較各個子陣列的大小,找到最大連續子陣列;

2、這種方法只是一般思路,時間複雜度太高,為:o(n^2),不應該選擇這樣的方法。

**實現

int getmaxaddofarray(int *arr, int sz)

if (subofarr > sum)}}

return sum;

}

上面的**複雜度已經為n^3,在上面的**基礎上加以改進,使時間複雜度變為n^2

int getmaxaddofarray(int *arr, int sz)}}

return sum;

}

1、狀態方程 : max( dp[ i ] ) = getmax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] )

2、上面式子的意義是:我們從頭開始遍歷陣列,遍歷到陣列元素 arr[ i ] 時,連續的最大的和 可能為 max( dp[ i -1 ] ) + arr[ i ] ,也可能為 arr[ i ] ,做比較即可得出哪個更大,取最大值。時間複雜度為 n。

**實現

int getmax(int a, int b)   //得到兩個數的最大值

int getmaxaddofarray(int* arr, int sz)

return max;

}int main()

; int sz = sizeof(array) / sizeof(array[0]);

int max = getmaxaddofarray(array, sz);

cout << max << endl;

return 0;

}

思路分析

1、對於陣列array,從array[1]開始逐個進行相加,與最大值比較,並不停地更替最大值。

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

有乙個整型陣列,裡面的元素有正數和負數,乙個或者連續的多個元素組成乙個子陣列,求所有子陣列的和的最大值。也就是連續子陣列最大和問題。這道題一般使用動態規劃來做,面試的時候問到也是考察動態規劃。f i 表示以i結尾的子陣列的最大和。既然是以i結尾,那從何處開始呢?j在i的左邊,如果a 0 到a j 的...

求連續子陣列最大和

輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。例如輸入的陣列為 2,11,4,13,5,2 和最大的子陣列為11,4,13 因此輸出為該子陣列的和20。本題解法多種多樣,時間複雜度可以為 o n 3 o n 2 o ...

求連續子陣列的最大和

題目一 給定乙個陣列,求該陣列的最大子陣列和 與求最長連續子陣列互為姊妹題 題目二 給定乙個陣列,求該陣列的最大兩個子陣列的和 子陣列位置無重合 解題一 子陣列的最大和 技巧法 func getmaxsum arr int int res intmin cur 0 for ele range arr...