動態規划---找一個序列的最大連續子序列和


很難很難:理解不到方法的含義、

轉載來自於:http://blog.csdn.net/joylnwang/article/details/6859677

細看了整篇文章,僅僅理解到一部分

1.假設最大連續子序列和是i到j,那么k為i,j之間的一個數,必然使得任意的i到k的子序列和大0.

2.利用一系列舉例說明,最大的連續子序列和不可能跨越兩個切分好的子序列(不懂1,為什么那樣切分)

3.最大的連續子序列和必然出現在最大前綴和。

根據上述結論,我們就得到了Kadane算法的執行流程,從頭到尾遍歷目標數組,將數組分割為滿足上述條件的子串,同時得到各子串的最大前綴和,然后比較各子串的最大前綴和,得到最終答案。我們以array={−2, 1, −3, 4, −1, 2, 1, −5, 4}為例,來簡單說明一下算法步驟。通過遍歷,可以將數組分割為如下3個子串(-2),(1,-3),(4,-1,2,1,-5,4),這里對於(-2)這樣的情況,單獨分為一組。各子串的最大前綴和為-2,1,6,所以目標串的最大子串和為6。

SO。。。。Copy源代碼

public class Solution {
    public int maxSubArray(int[] nums) {
        int max = Integer.MIN_VALUE;//設置最小值(第一次設置為零,結果報錯)
        int sum = 0;//每一個分組的和
        int i = 0;
        while(i < nums.length){
            sum += nums[i];//每一個分組的前n項和
            if(max < sum){
                max = sum;//取最大和
            }
            if(sum < 0){//假設<0。分組結束,開始下一組
                sum = 0;
            }
            i++;
        }
        return max;
    }
}                                                        

現在代碼是看懂了,但是自己寫一遍仍然不太會。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM