class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        int sum=array[0],max_sum=array[0],max=array[0];
        for(int i=0;i<array.size()-1;i++){
            if(array[i]>max)//如果数组全是负数,找最大的负数
                max=array[i];
            if(array[i+1]+sum>0 && sum>0)//只要和为正就继续加和
                sum+=array[i+1];
            else if(array[i+1]>0)//前面和非正,当出现正数,重置和为该正数
                sum=array[i+1];
            else//和为负就重置和
                sum=0;
            if(sum>max_sum)//记录出现过的最大和
                max_sum=sum;
        }
        return (array[array.size()-1]<0 && !max_sum)?max:max_sum;
    }
};