最大連續子陣列的暴力 分治 DP方法

2021-08-09 15:44:03 字數 1058 閱讀 5671

最大連續子陣列:給定一組有正有負的陣列,從中找出和最大的連續子陣列。

一 暴力求解

設定兩個for迴圈,分別求從1\2\3……個元素為起始元素的最大子陣列和。過程中不斷使用if條件判斷更新maxsum的值。時間複雜度o(n2)。

**如下:

#include //萬能標頭檔案 

using namespace std;

int main()

int maxsum,thissum;

maxsum=0;

for(int i=0;imaxsum) maxsum=thissum;

} } cout<

步驟:1. 將序列分為左右兩個子陣列 

2. 遞迴地求兩個子陣列的最大和s左

和s右3. 從中間的點分別找出左右,跨過分界線的最大子陣列的和s中

4. sm

ax=m

axs左

,s右,

s中**如下:

#include using namespace std;

int max3(int a,int b,int c)

int divideandconquer(int a,int left,int right)

//左邊掃瞄結束

maxrightbordersum = 0; rightbordersum = 0;

for (i = center+1; i < right; i++)

//右邊掃瞄結束

return max3(maxleftsum,maxrightsum,maxleftbordersum+maxrightbordersum);

}int maxsubseq3(int a,int n)

int main()

cout<

使用乙個for迴圈,只要sum的值小於0就丟棄,重新計數。

此法需保證陣列元素有正有負。

因為有正有負,所以最大值一定大於0。

int maxsubseqdp(int a,int n)

return maxsum;

}

最大連續子陣列

對於乙個給定的陣列a,求 a中連續子陣列,使得該陣列的和最大 例如 a 1,2,3,10,4,7,2,5 結果 3 10 4 7 2 暴力法 遍歷求a的所有子陣列,求和最大的 分治法 陣列的和最大那個陣列只會出現在以下三種情況中 a.存在於陣列下標從0到mid中,其中mid為陣列長度 length ...

最大連續子陣列

問題描述,給定乙個陣列a 0,1,n 1 求出a的連續陣列,使得該子陣列的和最大。例如 陣列a 1,2,3,10,4,7,2 則最大的子陣列為 3,10,4,7,2 解法 1.暴力法 2.分治法 3.動態規劃法 一 暴力發 分析 直接求解a i,j 的值,0 i n i j n,i,i 1,j 1的...

最大連續子陣列

題目 給乙個陣列,返回它的最大連續子串行的和 子向量的長度至少是1 例如 連續子向量的最大和為8 從第0個開始,到第3個為止 使用動態規劃 f i 以array i 為末尾元素的子陣列的和的最大值,子陣列的元素的相對位置不變 f i max f i 1 array i array i res 所有子...