這是個比較經典的c語言演算法問題。記得,在大二參加c語言比賽的時候,碰到過這個問題。當時就在網上學習了這麼乙個經典演算法。但是到了現在已經有點兒遺忘,今天無意之中又看到了這道題,感覺很親切,而且感覺到這個演算法真的非常經典,所以還是決定收藏在部落格中,希望自己能牢記這個問題。
這個演算法用到了動態規劃的思想。
在這一遍掃瞄陣列過程中,從左到右記錄當前子串行的和thissum,若這個和不斷增加,那麼最大子串行和maxsum也不斷的增加(不斷的更新maxsum)。如果往前掃瞄中遇到了負數,那麼當前子串行的和將會減小,此時thissum將會小於maxsum,當然maxsum也不會更新。如果往前的掃瞄過程中,thissum降到0時,說明前面已經掃瞄的那一段就可以拋棄了,這時將thissum的值設定為0。然後,thissum將從後面開始將這個字段進行分析,若有比當前maxsum大的子段,繼續更新maxsum。這樣一趟掃瞄後,結果也就出來了。
求最大子串行和
include using namespace std int maxseqsum const int a,int n o n 2 return s2 int maxseqsum2 const int a,int n o n else if s1 0 return s2 int maxseqsum3...
經典演算法 求最大子串行的和
最大連續子串行的和是一道很經典的演算法問題,給定乙個數列,其中可能有正數也可能有負數,我們的任務是找出其中連續的乙個子數列 不允許空序列 使它們的和盡可能大。例 輸入序列 2,3,1,4 輸出 9 注意 可以假設 輸入的陣列不為空,同時輸入的值都是整數。解法一 暴力破解 可以窮舉出所有的子串行,然後...
求最大子串行
1.暴力求解,時間複雜度為n 3 int maxsubarray int a int n return maxsum 2.分治法 將陣列從中間分開,那麼最大子陣列要麼完全再左半邊陣列,要麼完全在右半邊陣列,要麼跨立在分界點上。完全在左陣列 右陣列遞迴解決。跨立在分界點上 實際上是左陣列的最大字尾和右...