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
.
dp的题目,分析,每一个dp里存的是到目前位置的最大sum, 有两种情况:
1 加上当前值和前面的值组成最大sum
2 重新开始一段array
dp[i] = max(array[i], dp[i-1]+array[i])
注意初始化条件,dp[0] = nums[0]
class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int>dp(nums.size());
int result = nums[0];
dp[0]=nums[0];
for (int i = 1; i < nums.size(); i++)
{
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
if (result < dp[i])
result = dp[i];
}
return result;
}
};
观察发现,我们只需要dp的当前值和它前面一格的值,所以可以不开vector
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = nums[0];
int lastMax = nums[0];
for (int i = 1; i < nums.size(); i++)
{
lastMax = max(lastMax + nums[i], nums[i]);
if (result < lastMax)
result = lastMax;
}
return result;
}
};