【LeetCode】53. Maximum Subarray


53. Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array  [−2,1,−3,4,−1,2,1,−5,4] , the contiguous subarray  [4,−1,2,1]  has the largest sum =  6 .
【分析】
この問題に対して、非常に直観的な解法はすべてのサブ配列を遍歴し、二重ループを採用すれば完成するが、N個の要素の配列に対して、その群数はN(N+1)/2であり、アルゴリズムの時間複雑度はO(N 2)である.これは明らかに「暴力」の解法だ.テーマの例では、簡単に分析して、その法則を見つけることができます.[−2,1,−3,4,−1,2,1,−5,4]の場合、sumはsum=nums[0]=−2を初期化する.sum+nums[1]【解法及び注釈】
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int sum,maxSum;
        if(nums.empty())return 0;//      ,   0
        
        sum=maxSum=nums[0];//                
        
        for(int i=1;i<nums.size();i++)
        {
            if(nums[i]>sum+nums[i])//            ,       
            {
                sum=nums[i];
                if(sum>maxSum)maxSum=sum;//        
            }
            else
            {
                if(sum>sum+nums[i]&&sum>maxSum)//          ,   、     
                    maxSum=sum;
                sum+=nums[i];
            }
        }
        if(sum>maxSum)maxSum=sum;//        
        return maxSum;
        
    }
};