剣指offer-JZ 30-連続サブ配列の最大和


タイトルの説明
HZはたまに専門的な問題を持って非コンピュータ専門の同級生をからかっている.今日のテストグループの会議が終わった後、彼はまた話をしました:古い1次元モードの識別の中で、いつも連続するサブベクトルの最大和を計算する必要があって、ベクトルがすべて正数の時、問題はとてもよく解決します.しかし、ベクトルに負の数が含まれている場合、ある負の数を含んで、隣の正の数が補うことを期待しますか?例えば,{6,−3,−2,7,−15,1,2,2},連続サブベクトルの最大和は8(0番目から3番目まで)である.配列をあげて、その最大連続サブシーケンスの和を返して、あなたは彼にだまされませんか?(サブベクトルの長さは少なくとも1)
考え方:
動的計画入門では、f(i)を最初のi要素の最大和とし、f(i)=max(f(i-1)+array[i],array[i])、前のi要素の最大和は前のi-1要素の最大と、i番目の要素と現在の要素の両方の最大値を加えます.
C++
class Solution {
public:
    int FindGreatestSumOfSubArray(vector array) {
        int n = array.size();
        if(n == 0)
            return 0;
        //dp[i] = max(dp[i-1]+array[i],array[i])
        //maxSum = max(curSum, maxSum)
        int curSum = 0;
        int maxSum = 0x80000000;//   
        for(int i = 0; i < n; ++i){
            if(curSum <= 0)//       
                curSum = array[i];
            else
                curSum += array[i];
            maxSum = max(maxSum, curSum);
        }
        return maxSum;
    }
};