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.

最大子序列,还是直接上代码吧,有点描述不清

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        
        
        int res = INT_MIN, sum = 0;
        
        for(auto n:nums)
        {
            sum += n;
            res = max(res, sum);
            
            if(sum < 0)
            {
                sum = 0;//这个判断可以改成sum = max(sum, 0);
            }    
        }
        
        return res;
    }
};

再贴一个参考discuss的更简单的方法:

 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         
 5         int n = nums.size();
 6         
 7         int preMax = nums[0], curMax = nums[0];
 8         
 9         for(int i = 1; i < n; ++i)
10         {
11             preMax = max(preMax + nums[i], nums[i]);
12             curMax = max(curMax, preMax);
13         }
14         
15         return curMax;
16     }
17 };

 

posted @ 2018-03-21 20:25  还是说得清点吧  阅读(130)  评论(0)    收藏  举报