问题描述:
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
.
状态转移方程也很简单:
local[i+1] = max(local[i] + a[i+1],a[i+1]);
global[i+1] = max(global[i] + a[i+1],global[i]);
即分别用两个变量保存局部最大和全局最大。
AC代码如下:
class Solution {
public:
int maxSubArray(vector<int>& nums)
{
int sumLocal = nums[0];
int sumGlobal = nums[0];
for(int i = 1;i < nums.size();i++)
{
sumLocal = max(sumLocal + nums[i],nums[i]);
sumGlobal = max(sumGlobal,sumLocal);
}
return sumGlobal;
}
};