题:
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
.
tags:Dynamic Programming / Divide and Conquer
算法导论上有这题,用分治的方法,O(N*lgN)。
这里我用dp的方法,时间复杂度为O(n)。
遍历数组,累加,当累加的值小于0时,从下一元素开始再从新累加。在这个过程中记录下最大的累加值就可以了。
看代码更容易理解:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int max = INT_MIN, prevSum = 0;
int i, size = nums.size();
for(i = 0; i < size; ++i){
prevSum += nums[i];
if(prevSum>max) max = prevSum;
if(prevSum<0) prevSum = 0;
}
return max;
}
};