很難很難:理解不到方法的含義、
轉載來自於: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; } }
現在代碼是看懂了,但是自己寫一遍仍然不太會。。。