**
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...