將這個連續子數組分爲兩部分,一個是前綴,一個是後一個元素,要使這個連續子數組最大,那麼它的前綴肯定不能爲負,不然這個前綴對即將加上的值就無意義,用一個max記錄最大值,每次當前綴加上後一個元素的時候判斷和是否大於max,大於則更新max,再判斷和是否小於0,小於0則將前綴更新爲0,繼續加下一個元素,依次類推,直到數組末尾,max即爲最大子數組和。代碼如下:
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
if(array.length==0){
return 0;
}
int max = array[0];
int current = array[0]<0?0:array[0];
for(int i=1;i<array.length;i++){
current += array[i];
if(current>max){
max = current;
}else if(current<0){
current = 0;
}
}
return max;
}
}