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
.
More practice:
使用分治策略和暴力求解的复杂度分别为O(nlgn)与O(n^2)
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
这个题目中要求O(n),所以需要使用动态规划的方法。
参考别人blog与wiki有代码
int maxSubArray(int A[], int n)
{
if (n == 0)
return 0;
int max_ending_here = A[0];
int max_so_far = A[0];
for(int i = 1; i < n; ++i)
{
if (max_ending_here < 0)
max_ending_here = A[i];
else
max_ending_here += A[i];
max_so_far = max(max_so_far, max_ending_here);
}
return max_so_far;
}
使用分治策略和暴力求解的复杂度分别为O(nlgn)与O(n^2)
参照上一篇