原文鏈接 在hust快樂的學習 http://blog.csdn.net/hs794502825/article/details/7956730
問題描述:
方法一:對所有的子序列求和,在其中找到最大的
分析:
另一種思路:上面的方法在每一次循環中,固定i,並把a[i]當做起點,下面的方法將a[i]當做終點。
方法二:從某點開始的所有序列中,找最大的
分析:
注意:下面是一個錯誤的方法,因爲它的起始點固定了,每次都從a0開始,是不能保證遍歷所有的子序列的。
如果希望將固定終點,那麼計算的時候就要從終點開始,依次往前累加。代碼如下:
方法三:從某一個正數開始
第一步:
第二步:
第三步:
第四步:
最後如果你又瞭解一些程序結構上的優化的知識,那麼你會發現下面的問題:
① 循環的分支可以改變一下,去除嵌套分支結構。
② 判斷語句的分支中有共同部分,( i=j ),可以抽取出來。
以上兩步以後,循環部分的代碼編程 變成:
③ 下面這步非常重要,如果你發現,內層循環的循環變量j 和 外層循環的循環變量i
到這裏,代碼就可以神奇的變爲如下的形式:常量空間,線性時間
分析: