给定一个数组,找出这个数组最大连续子数组的和

将这个连续子数组分为两部分,一个是前缀,一个是后一个元素,要使这个连续子数组最大,那么它的前缀肯定不能为负,不然这个前缀对即将加上的值就无意义,用一个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;
    }
}

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章