Part1:问题描述
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
.
Part2:解题思路
本来想拿这道题练一下分治,但是我用的应该是动态规划,看了一下讨论区里的解法和我的想法也差不多。遍历一遍数组,记录到当前的nums[i]连续子数组的最大和currentSum,用maxSum保存整个过程中出现的最大的currentSum即为我们所求。值得注意的是:maxSum初始化的时候不应该取0,且如果去了当前取了当前的nums[i]让currentSum更小,我们决定不取这个值时(就是说我们放弃之前找到的那一段连续子数组,以当前的nums[i]做头部重新开始找),应该更新currentSum为nums[i]而不是0。
Part3:代码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int length = nums.size();
if (length == 0) return 0;
int maxSum = nums[0];
int currentSum = 0;
for (int i = 0; i < length; i++) {
currentSum = max(currentSum+nums[i], nums[i]);
if (currentSum > maxSum) {
maxSum = currentSum;
}
}
return maxSum;
}
};