關於如何查詢陣列中和最大的子串行

2021-05-22 14:43:33 字數 808 閱讀 6398

關於如何查詢陣列中和最大的子串行

問題:給定乙個陣列,如,求該陣列中的和最大的子串行。

思路:最簡單的方法,以每個元素作為起點,再考慮1~n所有的子串行元素個數的情況,這樣的複雜度就為o(n*n). 之後我們討論了如何簡化陣列,比如相鄰的正數可以將其繫結,兩端的負數可以直接排除,最後陣列可以被簡化為兩端為正數,中間沒有相鄰正數的形式。然而,這樣並沒有從根本上降低演算法的複雜度,我們的討論沒有切中問題的要害。後來,發現上學期的演算法課上已經有了現成的演算法,分治策略的複雜度為o(nlogn),動態規劃演算法的複雜度為o(n).看來乙個好演算法可以大大的降低解決問題的代價。最後我們採用了動態規劃演算法。

演算法實現

/*演算法思想:使用動態規劃演算法,

b[i]=max,i=0,1,2,...,n-1

b[i]表示最後一項為a[i]的序列構成的最大子段和

最優解為b[i]中的最大值

*/intmaxsub(int a,int n,int& begin,int& end)//a是給定的陣列,n是陣列中元素個數,begin和end分別記錄起始項和末項

else

if(b>sum)

}return sum;}

程式結果:輸入陣列得到最大和子串行

感想:我們在討論問題的時候應該從解決問題的本質出發,課上我們組的討論似乎偏離了這個方向,看來我這個pm沒有做好。動態規劃演算法很簡單,但是沒有學過演算法的人可能不是那麼容易想的到。我想我得好好的把演算法這門課補一補了。

求陣列中和最大的子陣列(陣列中和最大的子串)

某公司面試題,回來找的答案這個是最好的。int kadane const int array,size t length,unsigned int left,unsigned int right else return max 這裡我們需要注意,對於陣列元素全為負的情況,由於不滿足上述的兩條結論,所...

求陣列中和最大的子陣列

題目一 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每 個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n cpp view plain copy include stdio.h include conio.h 求一維陣列的最大連續子陣列元素之...

求陣列中和最大的子陣列與始末下標

using system using system.collections.generic using system.linq using system.text namespace maxsum myarray new int myarray new int myarray new int mya...