找到一个数组中的连续子数组(包含至少一个数字),该数组的总和最大。
例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],邻接子数组[4,-1,2,1]有最大的总和6。
分析:
当从头到尾遍历这个数组的时候,对于数组中的一个整数,我们可以将其加入之前的SubArray,也可以另起一个SubArray。
<1>若之前SubArray的总和大于0,我们将其加入之前的SubArray。
<2>若之前SubArray的总和小于或者等于0时,我们选择以这个数字开始,另起一个SubArray。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution
{
public:
int maxSubArray(vector<int>& nums)
{
int result = INT_MIN, front = 0;
for (int i = 0; i < nums.size(); ++i)
{
front = max(front + nums[i], nums[i]);
result = max(result, front);
}
return result;
}
};