求陣列中任何連續子向量之和

2021-05-22 12:47:50 字數 653 閱讀 9297

我們有乙個陣列,裡面包含 10個元素:31,-41,59,26,-53,58,97,-93,-23,84 ,如何求出裡面最大的連續子向量之和呢?

該程式應該輸出下標為x[2,6]之間的和,187為最大。當所有數是正數的時候,問題很容易解決,但是如果包含了負數,可就難了。

有乙個迭代演算法,採用動態規劃的思想:

maxsofar=0;

for(int i=0;i}

這段**的時間複雜度是 o(n*n)。

還有乙個分治演算法,可以將陣列分為兩半,然後繼續分下去,最大值可能在左邊一半,也可能是右邊一半,也可能跨越左邊右邊。

float maxsum(l,u)

rmax=sum=0;

for(i=m,u)

return max(lmax+rmax,masum3(1,m),masum3(m+1,u));

這個演算法**比較複雜,但是時間複雜度降低了。

最後乙個最重要的是掃瞄演算法,這個演算法很不好理解。下面給出偽**如下:

maxsofar=0;

maxendinghere=0;

for i=0-n;

maxendinghere=max(maxendinghere+x[i],0);

maxsofar=max(maxsofar,maxendinghere);

求陣列中連續子陣列的最大和

思路 計算出任意i到j之間連續子陣列的和再比較必然能得到最大值,但時間複雜度為o n 2 我們希望能找出線性時間的演算法。我們注意到,假如陣列中全為正數,那麼最大和必然為全部數相加 如果陣列中有負數,並且如果加上某個負數,子陣列的和小於0,則最大和子陣列必然不包含這個負數。基於此,給出以下 incl...

連續的子陣列之和

如果直接用優雅一點的暴力應該可以跑過 比較每一對子陣列判斷是否為k的倍數 最壞情況下是k需要最後兩個資料相加才使得條件成立,時間複雜度為 o n 2 tips 一定要注意細節特殊處理0,面對0無法進行取餘,只有0是0的倍數因此搜尋連續兩個及以上的0即為true 這裡都是血和淚 cpp 如下 clas...

求陣列中連續子陣列的最大值

求解陣列中連續一段子陣列和的最大值。例如 最大值為59 26 53 58 97 187 思路 計算出任意i到j之間連續子陣列的和再比較必然能得到最大值,但時間複雜度為o n 2 我們希望能找出線性時間的演算法。我們注意到,假如陣列中全為正數,那麼最大和必然為全部數相加 如果陣列中有負數,並且如果加上...