内容:
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
.
思路:
动态规划
另sum[i]表示从i开始的最大子串和,则有递推公式:sum[i] = max{A[i], A[i] + sum[i+1]}
因为递推式只用到了后一项,所以在编码实现的时候可以进行状态压缩,用一个变量即可
int maxSubArray(int A[], int n) {
int sum = A[n - 1];
int maxSum = sum;
for (int i = n - 2; i >= 0; i--) {
sum = max(A[i], sum + A[i]);
maxSum = max(maxSum, sum);
}
return maxSum;
}