最大連續和

2021-07-31 21:10:49 字數 867 閱讀 4262

//給出乙個長度為n的序列a1,a2,...,an,求最大連續和

//使用列舉 時間複雜度o(n^3)

best=a[1]; //初始最大值

for(int i=1;i<=n;++i)

}

//設si=a1+a2+...+ai,則ai+ai+1+...+aj=sj-si-1 (連續子串行的和等於兩個字首之差) 時間複雜度o(n^2)

s[0]=0;

for(int i=1;i<=n;++i) //遞推字首和

s[i]=s[i-1]+a[i];

for(int i=1;i<=n;++i)

for(int j=i;j<=n;++j)

best=max(best,s[j]-s[i-1]); //更新最大值

//分治法 時間複雜度o(nlogn)

int maxsum(int *a,int x,int y) //返回陣列在[x,y)中的最大連續和

{ int maxs;

if(y-x==1)

return a[x];

int m=x+(y-x)/2; //第一步:劃分[x,m)和[m,y)

int maxs=max(maxsum(a,x,m),maxsum(a,m,y)); //第二步:遞迴求解

int v,l,r; //第三步:合併

v=0;l=a[m-1];

for(int i=m-1;i>=x;--i)

l=max(l,v+=a[i]); //從分界點開始往左的最大連續和l

v=0;r=a[m];

for(int i=m;i

最大連續和

這個問題對我來說還挺難的,當初做dp時水過去了,但沒徹底理解,這次打算好好分析一下,爭取徹底搞懂。首先,像 1 1 2 2 3 3 4 4 5 5這樣的數列,想要找連續最大和,可以有很多種方法,從最慢的列舉o n 3 到最快的動態規劃o n 毫無疑問,我們要選擇複雜度低的演算法。所以我這裡就只分析兩...

最大連續和

求陣列中數的最大連續和,如 1,1,1,1,1 最大連續和為3 一 動態規劃 當我們從頭到尾遍歷這個陣列的時候,對於陣列裡的乙個整數,它有幾種選擇呢?它只有兩種選擇 1 加入之前的subarray 2.自己另起乙個subarray。那什麼時候會出現這兩種情況呢?設狀態為f j 表示以s j 結尾的最...

最大連續和

思路 設sum i 為前i個元素中,包含第i個元素且和最大的連續子陣列,result 為已找到的子陣列中和最大的。對第i 1個元素有兩種選擇 做為新子陣列的第乙個元素 放入前面找到的子陣列。sum i 1 max a i 1 sum i a i 1 result max result,sum i 方...