【Leetcode】53. Maximum Subarray

题目地址:

https://leetcode.com/problems/maximum-subarray/description/

题目描述:

  经典的求最大连续子数组之和。

解法:

   遍历这个vector,每次循环累加当前数值,同时更新最大值,若当前的累加和是负数,需要更新为0,因为在进行下一次累加求和的时候,

无论下一个数是正还是负,加上上一次的为负的和,都将变得更小,因而下一次求和时直接从当前值开始计算。

代码:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if (nums.size() == 1) {
            return nums.at(0);
        }

        vector<int>::iterator iter = nums.begin();
        int max = -(1 << 31);
        int sum = 0;
        for ( ; iter != nums.end(); iter++)
        {    
            sum += *iter;
            if (sum > max) {
                max = sum;
            }
            if (sum < 0) {
                sum = 0;
            }
        }

        return max;
    }
};
原文地址:https://www.cnblogs.com/AndrewGhost/p/8891104.html