一、问题描述
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
.
二、思路
本题是求数组中最大子段和,采用动态规划思路。如果当前值大于0,则临时子段和是当前值加上上一个结果;如果小于0,重新赋一个子段和。如果临时子段和大于当前最大和,则最大和变为临时子段和。
动态规划递归式为:
nums[i] = nums[i - 1] +nums[i]; nums[i] > 0;
nums[i] = nums[i] nums[i] <= 0;
三、代码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum = nums[0], b = 0;
for(int i = 0; i < nums.size(); ++i){
if(b > 0) b += nums[i];
else b = nums[i];
if(b > sum) sum = b;
}
return sum;
}
};