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.
初始状态A[i]表示以小标i结尾的子数组的最大和和,
那么A[i+1]=max{A[i],0}+nums[i]
输出结果为max{A[i]}。
时间复杂度是O(n),空间复杂度是O(1)。
runtime:12ms。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int length=nums.size();
int result=nums[0];
int current=nums[0];
for(int i=1;i<length;i++)
{
current=max(current,0)+nums[i];
if(current>result)
result=current;
}
return result;
}
};
class Solution {
public:
int maxSubArray(vector<int>& nums) {
return divide(nums,0,nums.size()-1);
}
int divide(vector<int> & nums,int left,int right)
{
if(left==right)
return nums[left];
if(left>right)
return numeric_limits<int>::min();
int mid=left+(right-left)/2;
int sum=0;
int leftMax=0;
for(int i=mid-1;i>=left;i--)
{
sum+=nums[i];
leftMax=max(leftMax,sum);
}
sum=0;
int rightMax=0;
for(int i=mid+1;i<=right;i++)
{
sum+=nums[i];
rightMax=max(rightMax,sum);
}
int tmp=leftMax+rightMax+nums[mid];
return max(tmp,max(divide(nums,left,mid-1),divide(nums,mid+1,right)));
}
};
原文:http://blog.csdn.net/u012501459/article/details/46602961