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