求陣列的子陣列之和最大值

2021-06-21 11:24:31 字數 1040 閱讀 3408

題目:乙個有n個整數元素的一維陣列a[0...n-1]這個陣列當然有很多子陣列,那麼子陣列之和最大值是多少?

解答:求子陣列之和最大,這裡是連續的子陣列,如果乙個數為負數,陣列之和會減少,記住最大值,只要陣列之和沒有小於0就可以繼續累加,比如,3到-1子陣列之和減小了,但是沒有小於0,可以繼續累加下乙個數9,就可以得到最大和3-1+9。如果子陣列之和小於0了,必須重新開始累加。

int max_array(int *a,int n)

int sum=0,max=a[0];

for(int i=0;i

拓展:1.如果陣列a[0..n-1]首位相連,也就是允許找到一段數字(a[i]...a[n-1],a[0]...a[j]),使其和最大,怎麼辦?

解答:分兩種情況討論:

(1)不跨越a[n-1],a[0],就是上題的解法;

(2)跨越a[n-1],a[0]。

對於(2)跨越a[n-1],a[0]其實就是從某個位置i開始到n-1,在從0開始到j,即a[i]...a[n-1]a[0]...a[j],可以求從某個位置到結尾的最大值,和從開頭到某個位置的最大值。

int max_array(int *a,int n)

int sum=0,max=a[0];

for(int i=0;imax1)

max1=sum;

if(sum<=0)

break;

} sum=0;

for(int j=n-1;j>i;j--)

return max1+max2;

}int main()

; cout<<(max_array(a,7)>max_contain(a,7)?max_array(a,7):max_contain(a,7))<

解答:可以設定連個變數儲存開始位置和結束位置,只有當max

int max_array(int *a,int n,int &start,int &end)

start=end=0;

int left=0;

int sum=0,max=a[0];

for(int i=0;i

求陣列的子陣列之和的最大值

本題的要求顯然是o n 級的複雜度咯 結合書上的分析,可以發現如下條件 從陣列右邊像左遍歷,當前下標為i,那麼最大值有3中情形 1.最大值為array i 2.最大值為array i maxsuminclude 3.最大值為不包括array i 的maxsumexclude 最後返回最大值 max ...

求陣列的子陣列之和的最大值

乙個有n個整數元素的一維陣列 a 0 a 1 a n 2 a n 1 這個陣列當然有很多子陣列,那麼子陣列之和的最大值是什麼呢?下面將給出3種解法的 解法一 int max maxsum1 int a,int n return maxnum 分析 該演算法的複雜度為o n2 解法二 思路 我們考慮陣...

求陣列的子陣列之和的最大值

乙個有n個整數元素的一維陣列 a 0 a 1 a n 2 a n 1 子陣列之和的最大值是什麼?要求子陣列的元素是連續的 例子 有陣列 2,5,3,6,4,8,6 則其子陣列之和的最大值為8,其對應的陣列為 5,3 解法一 採用直接法 記sum i.j 為陣列a中從第i到第j之間所有數之和,算出所有...