求最大子序列和算法

這是個比較經典的C語言算法問題。記得,在大二參加C語言比賽的時候,碰到過這個問題。當時就在網上學習了這麼一個經典算法。但是到了現在已經有點兒遺忘,今天無意之中又看到了這道題,感覺很親切,而且感覺到這個算法真的非常經典,所以還是決定收藏在博客中,希望自己能牢記這個問題。

 

這個算法用到了動態規劃的思想。

在這一遍掃描數組過程中,從左到右記錄當前子序列的和ThisSum,若這個和不斷增加,那麼最大子序列和MaxSum也不斷的增加(不斷的更新MaxSum)。如果往前掃描中遇到了負數,那麼當前子序列的和將會減小,此時ThisSum將會小於MaxSum,當然MaxSum也不會更新。如果往前的掃描過程中,ThisSum降到0時,說明前面已經掃描的那一段就可以拋棄了,這時將ThisSum的值設置爲0。然後,ThisSum將從後面開始將這個字段進行分析,若有比當前MaxSum大的子段,繼續更新MaxSum。這樣一趟掃描後,結果也就出來了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章